为什么此SFML无法正常工作,键盘代码有效?

问题描述 投票:0回答:1

我正试图绕圈移动。为什么这样不起作用?我没有正确编写键盘代码吗?我被卡住了。

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "Test");
    sf::CircleShape me(10.f);
    me.setFillColor(sf::Color::Green);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(me);
        window.display();
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
        me.move(20,0);
    }
    else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
        me.move(-20, 0);
    }
    return 0;
}
c++ sfml
1个回答
0
投票

需要在窗口的pollEvent函数内部调用键盘事件,如下所示:

#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

using namespace sf;

int main()
{

    sf::RenderWindow window(sf::VideoMode(200, 200), "Test");
    sf::CircleShape me(10.f);
    me.setFillColor(sf::Color::Green);
    int x = 100;
    me.setPosition(x, 100);

    while (window.isOpen()) {

        Event event;

        while (window.pollEvent(event)) {

            if (event.type == Event::Closed) window.close();

            if (event.type= Event::KeyPressed) {

                if (event.key.code == Keyboard::Right) {
                    x += 10;
                    me.setPosition(x, 100);
                }
                else
                    if (event.key.code == Keyboard::Left)
                    {
                        x -= 10;
                        me.setPosition(x, 100);
                    }

            }
        }

        window.clear();
        window.draw(me);
        window.display();

    }   

}
© www.soinside.com 2019 - 2024. All rights reserved.