最終回答付きの2回目の編集: SFMLでファイルを表示したい場合はpng
、8ビットで保存してください。
編集: 2番目のコードに悪いコピー/貼り付けがありました。修正しました
SFML はマルチ メディア アプリケーション (主にゲーム) 用に作成されているため、1 秒間に何度も更新して画面に描画する必要があります (つまりframes
)。そうは言っても、基本的なアプローチは、入力の処理、ゲーム ロジックの更新、描画の 3 つのことを行うメイン ループを用意することです。
SFML の Web サイトの古典的な例を参照してください。
#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
表示するすべてのもの (ブロック) を描画する必要があります。
あなたはこのようなものになるかもしれません:
#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;
}