在我的标题屏幕中,我有一个代码说第一个使用A的控制器是PlayerIndex.one。 这是代码:
public override void HandleInput(InputState input)
{
for (int anyPlayer = 0; anyPlayer <4; anyPlayer++)
{
if (GamePad.GetState((PlayerIndex)anyPlayer).Buttons.A == ButtonState.Pressed)
{
FirstPlayer = (PlayerIndex)anyPlayer;
this.ExitScreen();
AddScreen(new Background());
}
}
}
我的问题是:我如何在其他课程中使用“FirstPlayer”? (没有这个,对此代码没兴趣) 我尝试了Get Set的东西,但我不能让它工作。我需要将我的代码放在另一个类中吗?你用其他代码来做这个吗?
感谢。
答案 0 :(得分:1)
你可以制作一个静态变量说:SelectedPlayer, 并指定第一个玩家!
然后你可以通过这个类调用第一个玩家,
例如
class GameManager
{
public static PlayerIndex SelectedPlayer{get;set;}
..
..
..
}
并且在代码循环之后,您可以说:
GameManager.SelectedPlayer = FirstPlayer;
我希望这会有所帮助,如果您的代码更清楚,那将更容易提供帮助:)
答案 1 :(得分:1)
好的,所以为了做到这一点,你将不得不重新设计一点。
首先,您应该检查新游戏手柄输入(即,只有在新按下“A”时才应退出屏幕)。为此,您应该存储以前和当前的游戏手柄状态:
private GamePadState currentGamePadState;
private GamePadState lastGamePadState;
// in your constructor
currentGamePadState = new GamePadState();
lastGamePadState = new GamePadState();
// in your update
lastGamePadState = currentGamePadState;
currentGamePadState = GamePad.GetState(PlayerIndex.One);
您真正需要做的是修改处理输入的类。 HandleInput函数的基本功能应该移到输入类中。输入应该有一组函数来测试新的/当前输入。例如,对于您发布的案例:
public Bool IsNewButtonPress(Buttons buton)
{
return (currentGamePadState.IsButtonDown(button) && lastGamePadState.IsButtonUp(button));
}
然后你可以写:
public override void HandleInput(InputState input)
{
if (input.IsNewButtonPress(Buttons.A)
{
this.ExitScreen();
AddScreen(new Background());
}
}
注意:这仅适用于一个控制器。要扩展实现,您需要执行以下操作:
private GamePadState[] currentGamePadStates;
private GamePadState[] lastGamePadStates;
// in your constructor
currentGamePadStates = new GamePadState[4];
currentGamePadStates[0] = new GamePadState(PlayerIndex.One);
currentGamePadStates[1] = new GamePadController(PlayerIndex.Two);
// etc.
lastGamePadStates[0] = new GamePadState(PlayerIndex.One);
// etc.
// in your update
foreach (GamePadState s in currentGamePadStates)
{
// update all of this as before...
}
// etc.
现在,您想要测试每个控制器的输入,因此您需要在检查数组中的每个GamePadState以按下按钮后编写一个返回Bool的函数进行概括。
查看MSDN Game State Management Sample以获得完善的实施方案。我不记得它是否支持多个控制器,但结构清晰,如果没有,可以很容易地进行调整。