Предыдущая Следующая
GamePadState currentState = GamePad.GetState(PlayerIndex.One); if(currentState.Buttons.A == ButtonState.Pressed && aReleased == true)
{
state += 1;
}
// Проверяем, нажата кнопка А или отпущена if(currentState.Buttons.A == ButtonState.Pressed)
{
aReleased = false;
}
else if(currentState.Buttons.A == ButtonState.Released)
{
aReleased = true;
}
base.Update(gameTime);
}
В этой версии кода мы имеем дополнительную булеву переменную aReleased, значение которой всегда будет равно true, если кнопка А не нажата. Как только кнопка нажата и не отпущена, значение переменной моментально изменяется на false и блок кода, следующий за конструкцией операторов if/else, не выполняется. Все очень просто. Такой подход в отслеживании состояния дополнительной булевой переменной позволяет создать идеальную систему проверки отпускания любой нажатой кнопки или рычажка.
Для работы с нашим меню и заставками нам необходимо в исходном коде класса Game1 создать три булевых переменных для отслеживания нажатий на кнопки А и GamePadDPad.
bool downReleased = true; bool upReleased = true; bool aReleased = true;
Смена игровых состояний в классе Gomel
355
А уже в конце метода Update() класса Game1 мы будем следить за отпусканием нажатий кнопки А и GamePadDPad следующим образом.
// Проверяем, нажата кнопка А или отпущена
if (currentState.Buttons.A == ButtonState.Pressed)
{
aReleased = false;
}
else if (currentState.Buttons.A == ButtonState.Released)
{
aReleased = true;
}
// Проверяем, нажат DPad.Down или отпущен
if (currentState.DPad.Down == ButtonState.Pressed)
{
downReleased = false;
}
else if (currentState.DPad.Down == ButtonState.Released)
{
downReleased = true;
}
// Проверяем, нажат DPad.Up или отпущен
if (currentState.DPad.Up == ButtonState.Pressed)
{
upReleased = false;
}
else if (currentState.DPad.Up == ButtonState.Released)
{
upReleased = true;
}
В метод Update() первым в работу включается блок кода, обрабатывающий нажатие кнопки А в момент показа титульной заставки игры.
protected override void Update(GameTime gameTime)
{
GamePadState currentState = GamePad.GetState(PlayerIndex.One); switch (gameState)
{
case CurentGameState.SplashScreen:
{
if (currentState.Buttons.A == ButtonState.Pressed && aReleased == true)
gameState = CurentGameState.MenuScreen; break;
}
case CurentGameState.MenuScreen:
{
В момент запуска игры значение переменной state у нас равно единице.
356 Последние штрихи
public int state = 1;
Каждое нажатие GamePadDPad вверх или вниз автоматически будет изменять значение переменной state. Если нажат GamePadDPad с командой вниз, то значение переменной state увеличивается на единицу. Предыдущая Следующая
|