WP7备注(3)(GamePad)

public class InputState
    {
        public const int MaxInputs = 4;

        public readonly GamePadState[] CurrentGamePadStates;
        public readonly GamePadState[] LastGamePadStates;

        public InputState()
        {
            CurrentGamePadStates = new GamePadState[MaxInputs];
            LastGamePadStates = new GamePadState[MaxInputs];
        }

        public bool MenuUp
        {
            get
            {
                return IsTargetButtonPress(Buttons.DPadUp);
            }
        }

        public bool MenuDown
        {
            get
            {
                return IsTargetButtonPress(Buttons.DPadDown);
            }
        }

        public bool MenuSelect
        {
            get
            {
                return IsTargetButtonPress(Buttons.A);
            }
        }

        public bool MenuCancel
        {
            get
            {
                return IsTargetButtonPress(Buttons.Back);
            }
        }

        public bool PauseGame
        {
            get
            {
                return IsTargetButtonPress(Buttons.Back) ||
                       IsTargetButtonPress(Buttons.Start);
            }
        }

        public void Update()
        {
            for (int i = 0; i < MaxInputs; i++)
            {
                LastGamePadStates[i] = CurrentGamePadStates[i];
                CurrentGamePadStates[i] = GamePad.GetState((PlayerIndex)i, GamePadDeadZone.IndependentAxes);
            }
        }

        public bool IsTargetButtonPress(Buttons button)
        {
            for (int i = 0; i < MaxInputs; i++)
            {
                if (IsTargetButtonPress(button, (PlayerIndex)i))
                    return true;
            }

            return false;
        }

        public bool IsTargetButtonPress(Buttons button, PlayerIndex playerIndex)
        {
            return (CurrentGamePadStates[(int)playerIndex].IsButtonDown(button) && LastGamePadStates[(int)playerIndex].IsButtonUp(button));
        }

        public bool IsMenuSelect(PlayerIndex playerIndex)
        {
            return IsTargetButtonPress(Buttons.A, playerIndex) || IsTargetButtonPress(Buttons.Start, playerIndex);
        }

        public bool IsMenuCancel(PlayerIndex playerIndex)
        {
            return IsTargetButtonPress(Buttons.B, playerIndex) || IsTargetButtonPress(Buttons.Back, playerIndex);
        }
    }
 
整个输入状态类是通过以下方法实现的:
public bool IsTargetButtonPress(Buttons button)
        {
            for (int i = 0; i < MaxInputs; i++)
            {
                if (IsTargetButtonPress(button, (PlayerIndex)i))
                    return true;
            }

            return false;
        }

        public bool IsTargetButtonPress(Buttons button, PlayerIndex playerIndex)
        {
            return (CurrentGamePadStates[(int)playerIndex].IsButtonDown(button) && LastGamePadStates[(int)playerIndex].IsButtonUp(button));
        }

共有两个方法

1.一是判断是否有人输入了这个键(针对任何人)

2.二是判断是否这个指定人输入了这个键(针对特定的一个人)

 

每次获取用户所按的键使用过一下方法:

public void Update()
        {
            for (int i = 0; i < MaxInputs; i++)
            {
                LastGamePadStates[i] = CurrentGamePadStates[i];
                CurrentGamePadStates[i] = GamePad.GetState((PlayerIndex)i, GamePadDeadZone.IndependentAxes);
            }
        }

原文地址:https://www.cnblogs.com/otomii/p/2029118.html