Предыдущая Следующая
bool downReleased = true;
protected override void Update(GameTime gameTime)
{
if(keyboardState.IsKeyDown(Keys.Down) == true && downReleased == true)
{
state += 1;
}
downReleased = keyboardState.IsKeyUp(Keys.Down); base.Update(gameTime);
}
В этой версии кода мы имеем дополнительную булеву переменную downReleased, значение которой будет всегда равно true, если клавиша «вниз» не нажата. Как только клавиша «вниз» нажата и не отпущена, значение переменной моментально изменяется на false и блок кода, следующий за конструкцией операторов if/else, не выполняется. Все очень просто. Такой подход в отслеживании состояния дополнительной булевой переменной позволяет создать идеальную систему проверки отпускания любой нажатой клавиши.
Для работы с нашим меню и заставками нам необходимо в исходном коде класса Game1 создать три булевых переменных для отслеживания нажатий на клавиши Enter, Down и Up.
bool downReleased = true; bool upReleased = true; bool enterReleased = true;
А уже в конце метода Update() класса Game1 мы будем следить за отпусканием нажатых клавиш следующим образом.
downReleased = keyboardState.IsKeyUp(Keys.Down); upReleased = keyboardState.IsKeyUp(Keys.Up); enterReleased = keyboardState.IsKeyUp(Keys.Enter);
350 Последние штрихи
Смена игровых состояний в классе Game1
351
В метод Update() первым в работу включается блок кода, обрабатывающий нажатие клавиши Enter в момент показа титульной заставки игры.
protected override void Update(GameTime gameTime)
{
keyboardState = Keyboard.GetState();
switch(gameState)
{
case CurentGameState.SplashScreen:
{
if (keyboardState.IsKeyDown(Keys.Enter))
gameState = CurentGameState.MenuScreen;
break;
}
case CurentGameState.MenuScreen:
{
В момент запуска игры значение переменной state у нас равно единице.
public int state = 1;
Каждое нажатие на клавиатуре клавиш «вверх» или «вниз» автоматически будет изменять значение переменной state. Если нажата клавиша с командой вниз (Keys.Down), то значение переменной state увеличивается на единицу.
if (keyboardState.IsKeyDown(Keys.Down) == true && downReleased == true)
{
state += 1;
Для того чтобы значение переменной не было больше пяти или не выходило за пределы пяти команд, создана следующая проверка условия.
if (state > 5) state = 1;
}
В этом случае если state станет больше пяти, то ей будет присвоено значение, равное единице. То есть как только позиция подложки на экране станет больше позиции, отведенной для пятой и последней команды меню, желтая текстура получит позицию, равную первой команде. Таким образом, желтая подложка меню будет перемещаться по командам меню циклично сверху вниз, а в следующем блоке кода - и снизу вверх. Предыдущая Следующая
|