如何为游戏手柄按钮创建一个EventHandler,而不是在更新方法中按下

时间:2013-03-12 03:00:06

标签: c# event-handling xna gamepad

我正在尝试使用Microsoft Visual c#向XNA游戏手柄的按钮添加事件处理程序。我已尝试在更新方法中对要按下的按钮状态进行测试,但由于更新方法被调用为每秒60次,因此它会检查按钮按下并多次注册。是否有办法让按钮被按下并立即召唤事件? 这是我的更新方法中的代码不起作用:

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

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

1 个答案:

答案 0 :(得分:0)

通常单按的逻辑是:

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

那就是说,你真的不需要一个事件处理程序。