为什么SFF中的sf :: Clock自行重置?

时间:2016-06-16 14:27:20

标签: c++ sfml

我正在用C ++开发一个小小的SFML游戏。我要做的是用一个闪烁两种不同颜色的介绍性文字开始游戏,比如“Arturo Girona Presents”。我通过使用在while(window.isOpen())循环内增加的计数器使其工作,但后来我尝试使用sf :: Clock来查看它是否使闪烁看起来不那么随机。但是,出于某种原因,当我没有明确地告诉它时,时钟在每个循环之后保持重置,因此它不会从文本屏幕转换。时钟如何自行重置,如何解决? 这是我的while循环:

int count = 0;
sf::Clock clock;
int timer = clock.getElapsedTime().asMilliseconds();

while (window.isOpen())
{
    count++;
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }

    window.clear();
    while (timer < 5000)
    {
        if (timer < 200 && introText1.getColor() == sf::Color::Red)
        {
            introText1.setColor(sf::Color::White);
            window.draw(introText1);
            window.display();
        }

        if (timer < 200 && introText1.getColor() == sf::Color::White)
        {
            introText1.setColor(sf::Color::Red);
            window.draw(introText1);
            window.display();
        }
        break;
    }
    if (timer == 5000) {
        window.clear();
        window.draw(door);
        window.draw(doorWindow1);
        window.display();
    }

    cout << timer << endl;
    if (timer > 0)
        cout << "Time is moving" << endl;
}

1 个答案:

答案 0 :(得分:3)

时钟未被重置,您根本不会读取新值。 ; - )

在主循环内移动int timer = clock.getElapsedTime().asMilliseconds();

此外,您不希望while (timer < 5000)循环,尤其是break作为最后一句话。