首页 > 解决方案 > 如何通过多个类“联合变量”(sfml)使用 pollevent

问题描述

根据我的理解sf::Event,只有一个循环,因为它们都共享相同的内存空间,所以我的问题是我可以sf::Event在我的其他课程中使用:

#include <SFML/Graphics.hpp>

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();
        }

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

    return 0;
 }

sf::Event如果我想与我的其他班级分享,我是否可以参考我的或者这是不正确的

class a{

    void handleEvent(sf::Event& event){
        if (event.type == sf::Event::KeyPressed)
        {
            if (event.key.code == sf::Keyboard::Escape)
            {
                std::cout << "the escape key was pressed" << std::endl;
                std::cout << "control:" << event.key.control << std::endl;
                std::cout << "alt:" << event.key.alt << std::endl;
                std::cout << "shift:" << event.key.shift << std::endl;
                std::cout << "system:" << event.key.system << std::endl;
            }
        }
    }

};

标签: c++sfml

解决方案


sf::Event被实现为不同事件数据的联合,这意味着当时只有一个数据结构处于活动状态,并且取决于type字段的值,但它适用于每个实例而不是每个类型。

因此,您可以安全地传递事件,如果我理解正确,您的代码在这种情况下是可以的。


推荐阅读