gpt4 book ai didi

c++ - SFML 绘图对象在另一个对象之上

转载 作者:行者123 更新时间:2023-11-28 01:39:37 26 4
gpt4 key购买 nike

我正在写一个简单的游戏,首先我像这样制作背景图像(游戏板)

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 时,这个骰子图像有时会出现一小会儿然后消失,我如何让它永久在背景顶部?

最佳答案

如果您要清除窗口,则需要 帧绘制骰子。绘图调用应该发生在 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 这样的 bool 标志。

关于c++ - SFML 绘图对象在另一个对象之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790162/

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