gpt4 book ai didi

sfml - 键盘事件 SFML 2.0

转载 作者:行者123 更新时间:2023-12-04 16:32:06 25 4
gpt4 key购买 nike

我试图在 SFML 2 中获取关键输入,在 SFML 1.6 im 中使用

   while (App.GetEvent(Event))
{
if (App.GetInput().IsKeyDown(sf::Key::Down)) { dir='d'; }
}

但我不知道如何在 SFML 2 中做到这一点。

最佳答案

当您不需要担心实时键盘输入时,您可以使用与您提供的 SFML 1.6 代码非常相似的方法。在应用程序的事件处理循环中,您可以执行以下操作:

sf::Event event;
while (mWindow.pollEvent(event))
{
if (event.type == sf::Event::KeyPressed)
{
if (event.key.code == sf::Keyboard::Escape)
{
// Do something when Escape is pressed...
}
if (event.key.code == sf::Keyboard::W)
{
// Do something when W is pressed...
}

// And so on.
}
}

当您必须保证您的应用程序在用户按下键时获得焦点时,这种类型的输入处理非常有用,否则不会生成键事件。它也适用于不经常按下相关键的情况。您可以在此处的 SFML 2.0 教程中,在标题为“KeyPressed 和 KeyReleased 事件”的部分下查看此示例: http://sfml-dev.org/tutorials/2.0/window-events.php

另一方面,您实际上可能需要访问实时键盘输入。为此,请使用 SFML 2.0 的键盘类,如下所示:
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
// 'W' is currently pressed, do something...
}

通过实时输入,您可以及时访问输入设备在该特定时间点的状态。这很方便,因为您不必将所有关键检查都集中在事件处理循环中。这种方法的一个缺点是因为 SFML 只是读取键盘的状态,如果应用程序没有焦点、被最小化等,您的事件处理代码仍然可以执行。您可以找到有关所有实时输入的教程这里: http://sfml-dev.org/tutorials/2.0/window-inputs.php

在选择事件处理与实时方法时要小心。对于游戏示例,请考虑当用户按住空格键时角色发射机枪的情况。如果在事件处理循环中处理空格键,机枪会像半自动一样错误地开火,因为 sf::Event::KeyPressed 之间存在延迟。同一键的事件,即使用户按住键。如果您通过实时键盘输入检查来处理空格键,机枪将按预期反复开火。

关于sfml - 键盘事件 SFML 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com