【问题标题】:SFML Stop or delete clockSFML 停止或删除时钟
【发布时间】:2018-01-05 23:12:02
【问题描述】:

是否可以在 SFML 中停止或删除时钟?我正在学习 SFML,我确实让矩形变大,直到 4 秒过去然后它重置。但现在我正在考虑做类似的事情,但不是重置矩形大小,我想保留它在 4 秒内得到的矩形大小,然后我想在前一个矩形旁边绘制下一个矩形。但要做到这一点,我需要以某种方式停止创建时钟或冻结它,否则第一个矩形只会变得更大。有可能吗?

sf::RenderWindow window(sf::VideoMode(1800, 800), " window ");
sf::Clock timer;
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();

    } //while
    window.clear();

    sf::RectangleShape shape(sf::Vector2f(timer.getElapsedTime().asSeconds()*50,100));


    if (timer.getElapsedTime().asSeconds() > 4)
    {
        timer.restart();

    }



    shape.setPosition(sf::Vector2f(100, 400));

    shape.setFillColor(sf::Color(150,150,150));
    window.draw(shape);
    window.display();
}

【问题讨论】:

  • 不要停止时钟,而是停止矩形下注大于 4*50。
  • @super 我该怎么做?我在形状的构造函数中尝试了一行 if-else 语句,但它不起作用,然后我知道为什么,因为它已经创建,我现在不知道该怎么做。这是我的代码: int example = 0; sf::RectangleShape shape(sf::Vector2f((example == 1) ? 200 :timer.getElapsedTime().asSeconds() * 50, 100)); if (timer.getElapsedTime().asSeconds() > 4) { 示例 = 1; }

标签: c++ sfml


【解决方案1】:

一种方法可以是这样的

sf::RenderWindow window(sf::VideoMode(1800, 800), " window ");
sf::Clock timer;
sf::RectangleShape shape(sf::Vector2f(timer.getElapsedTime().asSeconds()*50,100));
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();

    } //while
    window.clear();

    if (shape.getSize().x < 200)
        shape.setSize(sf::Vector2f(std::min(timer.getElapsedTime().asSeconds()*50, 200.f), 100));

    shape.setPosition(sf::Vector2f(100, 400));

    shape.setFillColor(sf::Color(150,150,150));
    window.draw(shape);
    window.display();
}

【讨论】:

  • 即使我包含 和命名空间 std,我也遇到了与 std::min 一致的错误
  • 当我不在窗口循环中创建形状时,我在窗口中看不到它
  • 似乎 timer.getElapsedTime().asSeconds() 不能作为 std::min 中的参数
  • 需要编辑 std::min 的第二个参数,所以它也是一个浮点数。我将编辑答案。
  • 现在它可以工作了,但是我可以问你一个问题,为什么它现在可以完美地工作,但是当我像你一样在窗口循环中而不是在它之外创建形状时,矩形长度不会停止。
猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2015-04-18
  • 1970-01-01
相关资源
最近更新 更多