SFML - KeyEvents无效

时间:2014-01-22 03:08:45

标签: c++ sfml

我现在正在试验事件并试图将窗口作为参数来更改场景(菜单到级别和级别到其他级别),但我的主要问题是程序没有接收我的关键事件。我基本上从here获取了代码,并为场景更改添加了一个视图行。现在,Change函数被注释掉,直到我能找出为什么keyevent没有被注册。

#include <SFML/Graphics.hpp>
void Change(sf::RenderWindow& rwindow);
int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

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

            if(event.type == sf::Event::KeyPressed){
                if(event.key.code == sf::Keyboard::Space){
                window.clear();
                sf::CircleShape shape(70.f);
                shape.setFillColor(sf::Color::Red);
                //Change(window);
                }
            }
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
} 

void Change(sf::RenderWindow& rwindow){
    rwindow.clear();
    sf::CircleShape shape(70.f);
    shape.setFillColor(sf::Color::Red);
}

1 个答案:

答案 0 :(得分:0)

基本上你这样做:

int main() {
    int x = 1;
    if (true) { int x = 2; }
    std::cout << x;
    return 0;
}

This code will always output 1。为什么?因为x语句中的if与打印的shape不同!如果您的书架上没有好书,那么可变范围

在您的代码中,您有三个不同的main变量:第一个位于if的开头,第二个位于Change语句中,第三个位于#include <SFML/Graphics.hpp> void Change(sf::CircleShape& shape); void Unchange(sf::CircleShape& shape); int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed){ window.close(); } if(event.type == sf::Event::KeyPressed){ if(event.key.code == sf::Keyboard::Space){ Change(shape); } } if(event.type == sf::Event::KeyReleased){ if(event.key.code == sf::Keyboard::Space){ Unchange(shape); } } } window.clear(); window.draw(shape); window.display(); } return 0; } void Change(sf::CircleShape& shape){ shape.setRadius(70.f); shape.setFillColor(sf::Color::Red); } void Unchange(sf::CircleShape& shape){ shape.setRadius(100.f); shape.setFillColor(sf::Color::Green); } 功能。

您需要始终使用相同的新变量,而不是创建新变量。这是一种方式:

{{1}}