gpt4 book ai didi

c++ - SFML 帮助(使用 中的 Sleep 函数)

转载 作者:行者123 更新时间:2023-11-28 00:33:19 25 4
gpt4 key购买 nike

我在 Visual C++ 2010 Express Edition 中的 SFML/C++ 代码方面需要一些帮助。我试图让我的文字 (livesLeft) 变成“你赢了!”在程序休眠之前。这让玩家知道他赢了。但是,程序会在关闭时立即进入休眠状态并立即更改文本,因此您只会看到它在几毫秒内发生变化。我什至无法阅读它。

    bool play = true;
bool win = false;
bool touchFinish = false;

int lives = 3;

sf::Font arial;
if(arial.loadFromFile("Fonts/arial.ttf") == 0)
{
return 1;
}

sf::Text livesLeft;
livesLeft.setFont(arial);
livesLeft.setCharacterSize(30);
livesLeft.setString("Lives: ");
livesLeft.setPosition(0, 0);
livesLeft.setColor(sf::Color::White);

sf::RectangleShape finish;
finish.setSize(sf::Vector2f(200, 600));
finish.setPosition(700, 0);
finish.setFillColor(sf::Color::Green);

这些是我正在使用的变量,这是我尝试更改文本的代码:

    if(player.getGlobalBounds().intersects(finish.getGlobalBounds()))
{
livesLeft.setString("You Win!");
touchFinish = true;
}

if(touchFinish)
{
win = true;
}

if(win)
{
Sleep(5000);
play = false;
}

我也忘了补充一点,我在最后有渲染:

    window.clear();
window.draw(livesLeft);
window.draw(finish);
window.draw(player);
window.draw(obs1);
window.draw(obs2);
window.draw(obs3);
window.draw(obs4);
window.draw(obs5);
window.draw(obs6);
window.draw(obs7);
window.draw(obs8);
window.draw(obs9);
window.draw(obs10);
window.draw(obs11);
window.draw(obs12);
window.draw(obs13);
window.display();

最佳答案

这很可能是因为您没有为窗口调用显示方法。告诉文本更改只是准备下一个帧缓冲区来显示新文本,但是因为您从未告诉窗口在休眠前更新其显示,所以它永远不会显示新的帧缓冲区。

Here是使用 SFML 的简单程序的快速示例。请注意主游戏循环末尾的 window.display() 方法。

你实际上想要这样做:

if(win)
{
window.display();
Sleep(5000);
play = false;
}

之所以需要再次更新显示,是因为 Sleep(5000);阻塞线程,本质上意味着它在该调用中停留了 5000 毫秒。另外,如果你想在屏幕上保留之前的项目,你需要在 window.display(); 之前重绘那些项目。同样,因为这些不会在下一个帧缓冲区中。

关于c++ - SFML 帮助(使用 <Windows.h> 中的 Sleep 函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970380/

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