第二编辑与最终回答:如果你想显示png
与SFML文件,保存他们8位。
编辑:我在第二个代码一些不好的复制/粘贴,我固定它
至于SFML为多媒体应用(主要是游戏)制成,你需要刷新和借鉴筛选多次按秒(即frames
)。话虽如此,基本的方法是有一个主循环做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;
}
你的纹理加载和填充矢量必须完成主循环之前,然后之间window.clear()
和window.display
你需要画出你想要显示的一切(你的块)。
你最终可能会是这样的:(!bloqueTexture.loadFromFile( “RECURSOS/imagenes/bloque.png”))
#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;
}
我的代码像您说的那样放置,并且不工作,没有错误ethier。 – Ishidad
@Ishidad你有什么在屏幕上渲染?如果你的'.jpg'渲染不是'.png',我建议你将它们保存为8位,16位或24位PNG不能很好地工作。你也可以尝试直接在你的main中加载纹理,看看问题是否来自你的图像管理器。 –
完成后,我添加纹理JPG文件,似乎工作。感谢Thanx的帮助。 – Ishidad