WP7备注(3)(GamePad)
2011-04-26 11:37 血糯米Otomii 阅读(203) 评论(0) 编辑 收藏 举报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); } }