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):
Рисунок