Предыдущая Следующая
CurentGameState gameState = CurentGameState.SplashScreen;
Это значит, что в данный момент структурная переменная gameState ассоциируется исключительно со значением SplashScreen. Затем в игровом цикле необходимо просто создать проверку значения переменной gameState и в соответствии с ее текущим значением выбрать определенные действия.
switch(gameState) {
case CurentGameState.SplashScreen:
{
// показать заставку break; }
case CurentGameState.MenuScreen:
{
// показать меню break;
}
case CurentGameState.HelpScreen:
{
// показать экран с правилами игры break;
}
case CurentGameState.AboutScreen:
{
// показать экран об игре break;
}
case CurentGameState.GameScreen:
{
// старт игры break;
}
case CurentGameState.GameOverScreen:
{
// конец игры break;
}
case CurentGameState.VictoryScreen:
{
// экран выигрыша игры break;
}
}
Улучшаем смену игровых состояний 281
Элегантное и в то же время действенное решение смены игровых состояний. Этот подход мы будем использовать в нашей трехмерной игре. На компакт-диске в папке Code\Chapter16\GameState находится новый проект под названием GameState. В этом проекте используется вышеописанная схема. Ниже в листинге 16.1 предложен исходный код класса Gamel, иллюстрирующий работу смены игровых состояний на базе структуры CurentGameState.
На данном этапе в исходном коде структурная переменная gameState представляет фазу игрового процесса. Так будет продолжаться до тех пор, пока мы не дойдем до главы, рассказывающей о создании меню и других игровых заставок.
//=========================================================================
/// <summary>
/// Листинг 16.1
/// Исходный код к книге:
/// «Программирование игр для приставки Xbox 360 в XNA Game Studio Express»
/// Автор книги: Горнаков С. Г.
/// Глава 16
/// Проект: GameState
/// Класс: Gamel
/// Смена игровых состояний
/// <summary>
//=========================================================================
#region Using Statements using System;
using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; #endregion
namespace GameState {
public class Gamel : Microsoft.Xna.Framework.Game
{
private enum CurentGameState
{
SplashScreen,
MenuScreen,
HelpScreen,
AboutScreen,
GameScreen,
GameOverScreen,
VictoryScreen
}
CurentGameState gameState = CurentGameState.GameScreen; Предыдущая Следующая
|