【问题标题】:How to alias Xbox 360 buttons in C#?如何在 C# 中为 Xbox 360 按钮起别名?
【发布时间】:2010-11-26 03:47:13
【问题描述】:

我是 C Sharp 新手,正在使用 XNA 框架编写游戏。

我正在尝试为 Xbox 360 控制器上的按钮建立变量,这样我就可以在一个地方重新配置按钮的游戏功能,而不必在任何地方更改对按钮的直接引用。

所以如果我想为“攻击”分配一个按钮,而不是这样:

if (gamePadState.IsButtonDown(Buttons.B)
{
   // do game logic
}

我想这样做:

if (gamePadState.IsButtonDown(MyAttackButton)
{
   // do game logic
}

有什么想法吗?我确信这是一个非常简单的解决方案,但我尝试了几种方法,但都没有奏效。谢谢!

【问题讨论】:

    标签: c# xna xbox360


    【解决方案1】:

    Buttons 只是一个枚举,因此您只需要创建一个具有该名称的变量,例如

    Buttons MyAttackButton = Buttons.B;
    

    【讨论】:

      【解决方案2】:

      另一种方法是在某处定义一个枚举:

      public enum MyButtons
      {
          AttackButton = Buttons.B,
          DefendButton = Buttons.A
      }
      

      然后进行测试:

      if (gamePadState.IsButtonDown((Buttons)MyButtons.DefendButton))
      

      【讨论】:

        【解决方案3】:

        你也可以创建一个字典:

        enum MyButtons { ShootButton, JumpButton }
        
        Dictionary<MyButtons, Buttons> inputMap = new Dictionary<MyButtons, Buttons>()
        {
            { MyButtons.ShootButton, Buttons.Y },
            { MyButtons.JumpButton,  Buttons.B },
        }
        
        ...
        
        if (gamePadState.IsButtonDown(inputMap[MyButtons.ShootButton]))
        {
            // Shoot...
        }
        

        这种方法的优点是可以在运行时修改按钮映射,因此可以使用它来实现可自定义的控件设置。

        【讨论】:

        • 请注意,使用枚举作为字典键会产生垃圾,除非使用自定义 IComparer。在 PC 上这不是问题,但在 Xbox 360 上,它的 GC 不那么出色,您可能会遇到问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多