我正在编写简单的游戏,首先我制作像这样的背景图像(游戏板)
sf::RectangleShape backgroundRec(sf::Vector2f(710, 710));
sf::Texture backgroundTexture;
if (!backgroundTexture.loadFromFile("background.png"))
std::cout << "Couldnt load image\n";
backgroundRec.setTexture(&backgroundTexture);
然后我得到了骰子,这是以同样的方式创造的
sf::RectangleShape diceOne(sf::Vector2f(70, 70));
sf::Texture diceOneTexture;
if (!diceOneTexture.loadFromFile("dice1.png"))
std::cout << "Couldnt load image\n";
diceOne.setTexture(&diceOneTexture);
并在while循环中完成
while (mainWindow.isOpen()) {
sf::Event evnt;
while (mainWindow.pollEvent(evnt)) {
if (evnt.key.code == sf::Keyboard::R) {
diceSound.play();
mainWindow.draw(diceOne);
mainWindow.display();
}
}
mainWindow.clear();
mainWindow.draw(backgroundRec);
mainWindow.display();
}
}
而且我不知道如何在backgroundRec之上绘制diceOne ...我试图将绘图背景放在其他地方(在while循环的开始,在它之前,在if循环内)但似乎没有任何效果。当我按下这个R时,这个骰子图像有时会出现短暂的瞬间并消失,我如何使它成为永久性的背景?
答案 0 :(得分:2)
如果您clear
进入窗口,则需要绘制每个框架的骰子。绘制调用应在clear
之后和backgroundRec
之后进行:
bool drawDice = false;
while(mainWindow.isOpen())
{
sf::Event evnt;
while(mainWindow.pollEvent(evnt))
{
if(evnt.key.code == sf::Keyboard::R)
{
diceSound.play();
drawDice = true;
}
}
mainWindow.clear();
mainWindow.draw(backgroundRec);
if(drawDice)
{
mainWindow.draw(diceOne);
}
mainWindow.display();
}
为了在按下R
后才开始绘制骰子,你可以使用上面的drawDice
这样的布尔标志。