Скачать книгу

необходимые параметры

      int tapY = (int)gesture.Position.Y;

      int tapX = (int)gesture.Position.X;

      <…>

      switch (gesture.GestureType)

      {

      // Если жест является нажатием:

      case GestureType.Tap:

      <…>

      break;

      <…>

      // Если жест является перетягиванием:

      case GestureType.FreeDrag:

      <…>

      break;

      }

      }

      Нажатия на аппаратные кнопки

      Обработка нажатий на аппаратные кнопки тоже важна, однако в приложении запрещено использовать их для нестандартных функций (например, аппаратную кнопку назад для установления паузы).

      Одним из требований к приложениям и играм является то, что необходимо программировать действия для аппаратной кнопки назад таким образом, что после нажатия на нее показывается предыдущий модуль игры (не относится к игровым уровням), пример:

      Меню – Список уровней – Уровень 1 – Уровень 2

      Из любого уровня переход назад осуществляется в Список уровней, даже если новый уровень запускался после предыдущего, из Списка уровней соответственно в Меню, из Меню же происходит выход из приложения:

      if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

      {

      if (Mode == GameMode.Menu)

      {

      this. Exit ();

      }

      else if (Mode == GameMode.Levels)

      {

      Mode = GameMode.Menu;

      }

      else if (Mode == GameMode.Level_1)

      {

      Mode = GameMode. Levels;

      }

      else if (Mode == GameMode.Level_2)

      {

      Mode = GameMode.Levels;

      }

      }

      Создание игровых модулей рассмотрено в соответсвующем разделе.

      Работа с таймером

      Некоторые игры требуют работу со временем и выводом некоторого таймера на экран. Пример:

      Необходимые переменные:

      // Время игры, промежуточное время

      int time, tempTime;

      // Время в представлении ЧЧ:ММ:СС

      string timeString;

      В методе Update(GameTime gameTime) указываем:

      if (tempTime < (int)gameTime.TotalGameTime.TotalSeconds)

      {

      time++;

      }

      // Приведение времени в формат ЧЧ:ММ:СС

      GetTime(time);

      tempTime = (int)gameTime.TotalGameTime.TotalSeconds;

      Создаем метод GetTime(int timeTemp):

      public void GetTime(int timeTemp)

      {

      if (timeTemp/ 3600 < 10)

      {

      timeString = "0" + (timeTemp/ 3600).ToString() + ":";

      }

      else if (timeTemp/ 3600 >= 10)

      {

      timeString = (timeTemp/ 3600).ToString() + ":";

      }

      else if (timeTemp/ 3600 < 1)

      {

      timeString = "00:";

      }

      if ((timeTemp% 3600) / 60 < 10)

      {

      timeString = timeString + "0" + ((timeTemp% 3600) / 60).ToString() + ":";

      }

      else if ((timeTemp% 3600) / 60 >= 10)

      {

      timeString = timeString + ((timeTemp% 3600) / 60).ToString() + ":";

      }

      else if ((timeTemp% 3600) / 60 < 1)

      {

      timeString = timeString + "00:";

      }

      if ((timeTemp% 3600) % 60 < 10)

      {

      timeString = timeString + "0" + ((timeTemp% 3600) % 60).ToString();

      }

      else if ((timeTemp% 3600) % 60 >= 10)

      {

      timeString = timeString + ((timeTemp% 3600) % 60).ToString ();

      }

      else if ((timeTemp% 3600) % 60 < 1)

      {

      timeString = timeString + "00";

      }

      }

      В методе Draw(GameTime gameTime) выводим время на экран:

      spriteBatch. DrawString (Шрифт, timeString, new Vector2 (координата_x, координата_y), Color. Цвет);

      Пример создания игры

      Для примера рассмотрим создание игры судоку. Из контента использованы только текстуры (рис 4 – 9):

      Рисунок

Скачать книгу