如何为不在更新方法中的游戏手柄按钮按下创建事件处理程序

Posted

技术标签:

【中文标题】如何为不在更新方法中的游戏手柄按钮按下创建事件处理程序【英文标题】:How to create an EventHandler for a gamepad button press not in the update method 【发布时间】:2013-03-12 03:00:06 【问题描述】:

我正在尝试使用 Microsoft Visual c# 将事件处理程序添加到 XNA 游戏手柄的按钮按下。我尝试在更新方法中测试要按下的按钮状态,但由于更新方法每秒调用 60 次,它会检查按钮按下并注册了很多次。有没有办法让事件监听器按下按钮并调用事件一次而不是多次? 这是我在更新方法中不起作用的代码:

    protected override void Update(GameTime gameTime)
    
          if(GamePad.GetState(PlayerIndex.One).Buttons.Y == ButtonState.Pressed)
    
              //do some code
          
    

这不能满足我的需要,有人可以指点我正确的方向吗?

【问题讨论】:

【参考方案1】:

通常单按的逻辑是这样的:

if (button_is_pressed_now && button_was_not_pressed_last_frame)
 /* there was a single press */ 

这转化为您的情况:

if(currentGamepadState(PlayerIndex.One).Buttons.Y == ButtonState.Pressed &&
  previousGamepadState(PlayerIndex.One).Buttons.Y != ButtonState.Pressed)

          //do some code

这意味着您需要跟踪以前的游戏手柄状态。微软官方教程有更多内容:http://xbox.create.msdn.com/en-US/education/tutorial/2dgame/getting_started

也就是说,您实际上并不需要事件处理程序。

【讨论】:

以上是关于如何为不在更新方法中的游戏手柄按钮按下创建事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章

让 tvOS 游戏手柄按钮在每次物理按下按钮时仅发送一次消息

将游戏手柄数据传递到 Windows

如何在 Mac OSX 上模拟游戏手柄

当我在模拟器中按下 Apple TV 游戏手柄按钮时,它们不会触发

在 Linux 中处理 tty 中的游戏手柄按钮点击

如何为随机自定义 ListView 适配器设置按钮单击事件?