C# 如何为gamepad按钮创建EventHandler不在更新方法中

C# 如何为gamepad按钮创建EventHandler不在更新方法中,c#,event-handling,xna,gamepad,C#,Event Handling,Xna,Gamepad,我正在尝试使用Microsoft Visual c#将事件处理程序添加到XNA gamepad的按钮按下中。我试着在update方法中测试要按下的按钮状态,但是由于update方法每秒调用60次,它会检查按钮按下情况,并进行多次注册。有没有一种方法可以使按钮被按下时成为事件监听器,并调用事件一次而不是多次? 以下是我在update方法中无法使用的代码: protected override void Update(GameTime gameTime) { if

我正在尝试使用Microsoft Visual c#将事件处理程序添加到XNA gamepad的按钮按下中。我试着在update方法中测试要按下的按钮状态,但是由于update方法每秒调用60次,它会检查按钮按下情况,并进行多次注册。有没有一种方法可以使按钮被按下时成为事件监听器,并调用事件一次而不是多次? 以下是我在update方法中无法使用的代码:

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

这不符合我的需要,有人能告诉我正确的方向吗?

通常单次按下的逻辑是:

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
}
这意味着您需要跟踪以前的gamepad状态。微软的官方教程对此有更多介绍:

也就是说,你并不需要一个事件处理程序