我试图让播放器按下任何按钮继续从主页。我之所以能够做到这一点,是因为我列出了一个按钮列表,然后循环这些按钮,并检查其中一个按钮是否已经关闭;然而,我觉得这段代码有点难看,我想知道是否有一种更简单的方法可以做到这一点,而我并不是这么想的?
下面是我的代码现在的样子:
if (GamePad.GetState(PlayerIndex.One).IsConnected)
{
var buttonList = new List<Buttons>()
{
{Buttons.A},
{Buttons.B},
{Buttons.Y},
{Buttons.X},
{Buttons.Start},
{Buttons.Back},
{Buttons.RightShoulder},
{Buttons.LeftShoulder},
{Buttons.RightTrigger},
{Buttons.LeftTrigger}
};
foreach (var button in buttonList)
{
if (GamePad.GetState(PlayerIndex.One).IsButtonDown(button))
ExitMainMenu= true;
}
}
发布于 2013-08-05 05:05:41
这应该能胜任这份工作。在每个更新循环的末尾,保存previousGamePadState
的状态。然后你就可以比较它们了。这是快速检测更改的方法。不需要循环。
可以使用PacketNumber确定输入状态是否已更改。如果PacketNumber的值在对GetState的两个顺序调用之间保持不变,那么输入没有变化。
public bool HasInputChanged(GamePadState previousGamePadState, bool ignoreThumbsticks)
{
GamePadState currentState = GamePad.GetState( PlayerIndex.One );
if ((currentState.IsConnected) && (currentState.PacketNumber != previousGamePadState.PacketNumber))
{
//ignore thumbstick movement
if ((ignoreThumbsticks == true) && ((currentState.ThumbSticks.Left.Length() != previousGamePadState.ThumbSticks.Left.Length() )&&(currentState.ThumbSticks.Right.Length() != previousGamePadState.ThumbSticks.Right.Length()) ))
return false;
return true
}
return false;
}
编辑:更改为方法。它不能保证按原样工作,但应该能正常工作。另外,因为这真的可以检测到输入的变化,所以如果用户发布按钮,它也会被看到。我还添加了if
来检测大拇指的移动,所以你至少可以忽略这些。
希望这能帮到你。告诉我,如果它不适合你的需要,我相信我们能解决这个问题。
发布于 2013-08-05 04:32:02
您可以手动构造空的GamePadState
,然后使用当前真实的检查它是否相等,您可以通过呼叫GamePad.GetState
。获取它
playerInput = GamePad.GetState(PlayerIndex.One);
emptyInput = new GamePadState(Vector2.Zero, Vector2.Zero, 0, 0);
if (playerInput != emptyInput){
// yay!!!!, a button push!
//
// P.S., remember to allow any PlayerIndex to take control of the the game
// from the main menu. It sucks when you pick up controller2 and it doesn't work.
}
发布于 2013-08-05 03:44:49
如果您不介意使用反射,您可以使用类似这样的东西(甚至可能是这样):
var properties = typeof(GamePadButtons).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
var value = property.GetValue(GamePad.GetState(PlayerIndex.One).Buttons);
if (value is ButtonState && (ButtonState)value == ButtonState.Pressed)
ExitMainMenu = true;
}
https://gamedev.stackexchange.com/questions/60248
复制相似问题