Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

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 увеличивается на единицу.


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz