使用sf::Sprite创建精灵对象
Create Sprite objects using sf::sprite
代码:
#include <SFML/Graphics.hpp>
#include <iostream>
#include <chrono>
#include <thread>
#include <string>
#include <string.h>
static void threadSleep(int newMilli) {
std::this_thread::sleep_for(std::chrono::milliseconds(newMilli));
}
int main() {
// Sprite =======
bool gate = true;
sf::Texture texture;
if (!texture.loadFromFile("index.png")) {
std::cout << "Error loading index.png:" << std::endl;
} else { std::cout << "Loaded 'index.png'" << std::endl; }
// sprite0
sf::Sprite sprite;
sprite.setTexture(texture);
sprite.setTextureRect(sf::IntRect(0, 0, 10, 10));
float x = 315, y = 235;
sprite.setPosition(x, y);
// sprite1
sf::Sprite sprite1;
sprite1.setTexture(texture);
sprite1.setTextureRect(sf::IntRect(0, 0, 10, 10));
float x1 = 305, y1 = 235;
sprite1.setPosition(x1, y1);
// sprite2
sf::Sprite sprite2;
sprite2.setTexture(texture);
sprite2.setTextureRect(sf::IntRect(0, 0, 10, 10));
float x2 = 295, y2 = 235;
sprite2.setPosition(x2, y2);
// sprite3
sf::Sprite sprite3;
sprite3.setTexture(texture);
sprite3.setTextureRect(sf::IntRect(0, 0, 10, 10));
float x3 = 285, y3 = 235;
sprite3.setPosition(x3, y3);
// sprite4
sf::Sprite sprite4;
sprite4.setTexture(texture);
sprite4.setTextureRect(sf::IntRect(0, 0, 10, 10));
float x4 = 275, y4 = 235;
sprite4.setPosition(x4, y4);
// Starting Window ==========================
sf::RenderWindow window(sf::VideoMode(640, 480), "-Pandora's Box-");
// Window----------------------------------------------------------------------
while (window.isOpen()) {
sf::Event event;
//==============================
while (window.pollEvent(event)) {
// The Message Loop (Brain of Program)
switch (event.type) {
// Close Window
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code) {
case sf::Keyboard::A:
std::cout << "[a] -pressed-n" << std::endl;
x4 = x3; y4 = y3; // This just makes x4 copy x3
x3 = x2; y3 = y2; // and x3, x2, x1, x;...
x2 = x1; y2 = y1;
x1 = x; y1 = y;
sprite.setPosition(x -= 10, y);
sprite1.setPosition(x1, y1);
sprite2.setPosition(x2, y2);
sprite3.setPosition(x3, y3);
sprite4.setPosition(x4, y4);
break;
case sf::Keyboard::W:
std::cout << "[w] -pressed-n" << std::endl;
x4 = x3; y4 = y3;
x3 = x2; y3 = y2;
x2 = x1; y2 = y1;
x1 = x; y1 = y;
sprite.setPosition(x, y -= 10);
sprite1.setPosition(x1, y1);
sprite2.setPosition(x2, y2);
sprite3.setPosition(x3, y3);
sprite4.setPosition(x4, y4);
break;
case sf::Keyboard::D:
std::cout << "[d] -pressed-n" << std::endl;
x4 = x3; y4 = y3;
x3 = x2; y3 = y2;
x2 = x1; y2 = y1;
x1 = x; y1 = y;
sprite.setPosition(x += 10, y);
sprite1.setPosition(x1, y1);
sprite2.setPosition(x2, y2);
sprite3.setPosition(x3, y3);
sprite4.setPosition(x4, y4);
break;
case sf::Keyboard::S:
std::cout << "[s] -pressed-n" << std::endl;
x4 = x3; y4 = y3;
x3 = x2; y3 = y2;
x2 = x1; y2 = y1;
x1 = x; y1 = y;
sprite.setPosition(x, y += 10);
sprite1.setPosition(x1, y1);
sprite2.setPosition(x2, y2);
sprite3.setPosition(x3, y3);
sprite4.setPosition(x4, y4);
break;
case sf::Keyboard::Space:
std::cout << "[space] -pressed-n" << std::endl;
break;
}
break;
case sf::Event::Resized:
std::cout << event.size.width << " : " << event.size.height << std::endl;
break;
case sf::Event::LostFocus:
std::cout << "[Pandora Box] -Lost Focus-n" << std::endl;
break;
case sf::Event::GainedFocus:
std::cout << "[Pandora Box] -Gained Focus-n" << std::endl;
break;
}
}
window.clear();
//===========================
if (gate == true) {
window.draw(sprite);
window.draw(sprite1);
window.draw(sprite2);
window.draw(sprite3);
window.draw(sprite4);
}
//===========================
window.display();
}
return 0;
}
我想做的是在"case sf::Event::KeyPressed:"处按"Space",然后创建一个新的精灵。就像开头的代码:"sf::Sprite Sprite",但类似于"Sprite[#]"这样的数组。但是我想知道,我一直在观察一个"sf::Sprite"是否可以有一个数组,但实际上在上面找不到任何东西
例如:
case sf::Keyboard::Space:
counter += 1 // counter ='s 6 now
sf::Sprite sprite[counter];
sprite[counter].setTexture(texture);
sprite[counter].setTextureRect(sf::IntRect(0, 0, 10, 10));
float x = #, y = #; // don't worry about x or y
sprite[counter].setPosition(x, y);
break;
当然,我会将sprite0-sprite4更改为相同的格式(使用数组),但有人知道我该怎么做吗?我在网上找不到这样的东西,我怀疑stackoverflow上是否有人问过这个问题(已经搜索过了)
如果这是一个简单的修复,请评论/回复,我对C++和SFML 很陌生
-提前谢谢。
这个程序使用SFML,一个类似游戏的图形库
这就像一个蛇的游戏,目前它所能做的就是像原来的蛇游戏一样用5个块(10x10像素)移动
std::vector是您要查找的:
std::vector<sf::Sprite> sprites;
当您按下空格键时:
sf::Sprite sprite;
// Initialization here
sprites.push_back(sprite);
然后当你使用它时:
sprites[x].setTexture(SomeTexture);
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- Cocos2d-x CCArray-对象和精灵
- 使用sf::Sprite创建精灵对象
- 如何传递一个c++对象变量到Lua脚本,以便动画精灵
- 精灵对象在放置到向量中时不再渲染
- 用矢量对象作为成员的c++精灵类