为什么不是所有的键都在 SFML 事件循环之外处理?

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

我面临着如何在循环中或循环外处理击键的问题?为此,我需要阅读点击次数

w a s d 键不会在 KeyPressed 循环外处理,但会读取左箭头、上箭头等键

void Game::updateEvents()
{
    sf::Event ev;
    while (_window->pollEvent(ev))
    {
        if (ev.type == sf::Event::Closed)
        {
            _window->close();
        }

    }

    if (ev.type == sf::Event::KeyPressed) std::cout << ev.key.code;
}
c++ sfml
1个回答
0
投票

在游戏循环内部而不是外部读取输入事件非常重要。这是因为游戏循环通常代表游戏的主要逻辑,负责更新游戏状态和渲染图形。通过读取游戏循环内的输入事件,可以确保游戏逻辑和输入处理同步。

在您的代码中,如果窗口不是开放式的,您应该添加一个 else:

在 else 中,您可以收集玩家将按下的每个输入。这是我的一个工作示例,我使用 Inputs.h 接收来自用户的所有输入:

while (renderWindow.pollEvent(event))
    {
        if (event.type == Event::Closed)
            renderWindow.close();
    }
    else
    {
        if (Keyboard::isKeyPressed(Keyboard::A)) inputs.moveHorizontal -= 1.0f;
    }

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