gpt4 book ai didi

c++ - SFML 2.0 – 用 Sprite vector 绘图

转载 作者:太空狗 更新时间:2023-10-29 21:01:53 24 4
gpt4 key购买 nike

我正在尝试创建一个循环以在屏幕上绘制 10 个方 block ,但没有显示任何内容。我没有出错,所以我认为 vector 没有存储 Sprite 。我是 SFML 的新手,所以我真的不知道自己做错了什么。

sf::Texture bTexture;
sf::Texture bloqueTexture;
sf::Sprite bloqueSprite;

//create vector of blocks
std::vector<sf::Sprite> bricks(10, sf::Sprite(bloqueTexture));

fondo.setTexture(img_mgr.getImage("fondo.jpg"));
personaje.setTexture(img_mgr.getImage("jumper.png"));
personaje.setPosition(100,POSICION_TERRENO_Y);
bloqueSprite.setTexture(img_mgr.getImage("bloque.png"));
bloqueTexture.loadFromFile("Recursos/imagenes/bloque.png");

//Fill the vector with the texture
for (int i = 0; i < bricks.size(); i++)
{
bricks[i].setTexture(bloqueTexture);
bricks[i].setPosition(100 + (i * 45) , 320);
window.draw(bricks[i]);
}

最佳答案

第二次编辑最终答案:如果你想用 SFML 显示 png 文件,请将它们保存为 8 位。

编辑:我在第二个代码中有一些错误的复制/粘贴,我修复了它

由于 SFML 是为多媒体应用程序(主要是游戏)制作的,因此您需要每秒多次刷新和绘制到屏幕(即 )。也就是说,基本方法是让一个主循环做 3 件事:处理输入、更新游戏逻辑,然后绘图。

请参阅 SFML 网站上的经典示例:

#include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}

window.clear();
window.draw(shape);
window.display();
}

return 0;
}

你的纹理加载和填充 vector 必须在主循环之前完成,然后在 window.clear()window.display 之间你需要绘制所有东西你想显示(你的 block )。

你可能会得到这样的结果:

#include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");

sf::Texture bTexture;
sf::Texture bloqueTexture;
sf::Sprite bloqueSprite;

//create vector of blocks
std::vector<sf::Sprite> bricks(10, sf::Sprite(bloqueTexture));

fondo.setTexture(img_mgr.getImage("fondo.jpg"));
personaje.setTexture(img_mgr.getImage("jumper.png"));
personaje.setPosition(100,POSICION_TERRENO_Y);
bloqueSprite.setTexture(img_mgr.getImage("bloque.png"));
bloqueTexture.loadFromFile("Recursos/imagenes/bloque.png");

for (int i = 0; i < bricks.size(); i++)
{
bricks[i].setTexture(bloqueTexture);
bricks[i].setPosition(100 + (i * 45) , 320);
}

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}

window.clear();
for (int i = 0; i < bricks.size(); i++)
{
window.draw(bricks[i];
}
// Consider doing this :
// for(const auto& brick : bricks)
// window.draw(brick);

window.display();

}

return 0;
}

关于c++ - SFML 2.0 – 用 Sprite vector 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16927780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com