netlib.narod.ru< Назад | Оглавление | Далее >

Изменение начального экрана

Поскольку связи между экранами теперь отличаются, вам надо изменить начальный экран для добавления нового варианта Network Game, что во-первых требует изменения меню. Итак, измените конструктор класса StartScene и исправьте строку, где создается меню, заменив ее на следующую:

// Создание меню
string[] items = {"One Player", "Two Players", "Network Game",
                  "Help", "Quit"};

Поскольку вы добавили новый элемент, вам необходимо изменить метод HandleStartSceneInput класса Game1, обновив индексы команд меню, которые открывают экран помощи и завершают игру:

/// <summary>
/// Обработка кнопок и клавиатуры в StartScene
/// </summary>
private void HandleStartSceneInput()
{
    if (CheckEnterA())
    {
        audioComponent.PlayCue("menu_select3");

        switch (startScene.SelectedMenuIndex)
        {
            case 0:
                actionScene.TwoPlayers = false;
                ShowScene(actionScene);
                break;
            case 1:
                actionScene.TwoPlayers = true;
                ShowScene(actionScene);
                break;
            case 3:
                ShowScene(helpScene);
                break;
            case 4:
                Exit();
                break;
        }
    }
}

И в методе HandleScenesInput класса Game1 (который обрабатывает ввод во всех сценах) вы также должны добавить поддержку для новой сцены:

/// <summary>
/// Обработка ввода во всех игровых сценах
/// </summary>
private void HandleScenesInput()
{
    // Обработка ввода начальной сцены
    if (activeScene == startScene)
    {
        HandleStartSceneInput();
    }

    // Обработка ввода сцены помощи
    else if (activeScene == helpScene)
    {
        if (CheckEnterA())
        {
            ShowScene(startScene);
        }
    }

    // Обработка ввода сцены игры
    else if (activeScene == actionScene)
    {
        HandleActionInput();
    }

    else
    {
        // Обработка ввода сетевой сцены
        HandleNetworkSceneInput();
    }
}

Давайте создадим метод, который будет обрабатывать ввод сетевой сцены. Добавьте следующий код для метода:

/// <summary>
/// Обработка меню сетевой сцены
/// </summary>
private void HandleNetworkSceneInput()
{
}

Руководство, которое вы видели в предыдущей главе, добавляет набор сервисов к вашей игре, и когда они открываются, ваша игра не должна перехватывать пользовательский ввод, поскольку это может смутить игрока. Следовательно, также изменим метод Update класса Game1, как показано ниже, чтобы вы не перехватывали пользовательский ввод, когда открыт экран гида:

/// <summary>
/// Позволяет игре запускать логику, такую как обновление мира,
/// проверка столкновений, сбор ввода и воспроизведение звука
/// </summary>
/// <param name="gameTime">Предоставляет снимок значения таймера</param>
protected override void Update(GameTime gameTime)
{
    // Обработка игрового ввода
    if (!Guide.IsVisible)
    {
        HandleScenesInput();
    }

    base.Update(gameTime);
}

Запустите игру, и все должно работать нормально, за исключением пункта Network Game, который не делает ничего. Позже вы сделаете, чтобы этот пункт открывал сцену многопользовательской игры.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz