Спонсор: Microsoft
Опубликован: 10.04.2009 | Уровень: специалист | Доступ: свободно
Самостоятельная работа 5:

Игровая физика

Аннотация: В этой лабораторной работе мы поговорим о реализации физических законов в компьютерных играх.

Примеры к лабораторной работе

Задачи работы

  • Создать шаблон платформенной игры

Немного теории

  • Строго говоря, наше знакомство с игровой физикой началось тогда, когда мы начали перемещать объекты по игровому полю, используя для их перемещения понятие скорости. В нашем случае это – скорость измерения координат. Столкновения объектов – это так же пример реализации физических законов, когда мы имитируем столкновение твердых тел в пространстве. Любые другие взаимодействия объектов так же являются примерами применения физических законов в компьютерных играх.
  • Для реализации более сложных взаимодействий требуется построение физической модели игрового объекта, которая учитывает значимые воздействия на этот объект.

Шаблон платформенной игры

Платформенные игры или платформеры получили такое название потому, что игрок управляет персонажем, который перемещается по площадкам – платформам. В ходе прохождения игры он переходит или перепрыгивает с платформы на платформу, собирает так называемые бонусы, сражается с компьютерными "врагами" и т.д. Действие подобных игр происходит в двумерной среде. Разработаем шаблон такой игры.

Для начала подумаем о том, как нам конструировать игровые экраны. Экран типичной платформенной игры состоит из элементов, которые по-разному взаимодействуют с объектом пользователя. Некоторые из них (стены) непроницаемы для объекта, некоторые (бонусы) при столкновении с объектом исчезают, а игроку начисляются очки или даются какие-то другие улучшения игрового персонажа. Объекты-лестницы позволяют перемещаться между отдельными "этажами" игрового экрана, которые недоступны при других способах перемещения, объекты-враги отнимают некоторое количество очков (или "жизней") у персонажа. Как правило, объекты, которыми заполнен экран, имеют определенный размер, обычно – одинаковый. То есть при их расстановке по экрану можно представить, что экран разбит на клетки, равные размерам объекта. Перемещение игрового объекта, контролируемого пользователем, совсем необязательно должно быть прерывистым, поклеточным, однако сам игровой экран удобнее всего конструировать именно таким способом.

Прежде чем начинать разработку, создадим несколько изображений, которые будем использовать в качестве графических образов игровых объектов. На рис. 9.1. вы можете видеть эти объекты.

Изображения для визуализации игровых объектов и фона

Рис. 9.1. Изображения для визуализации игровых объектов и фона

Перечислим объекты, которые понадобятся нам для создания прототипа платформенной игры.

Объект игрока (me.png) – им управляет играющий.

Фон (background.png) – фоновое изображение.

Бонус №1 (bonus1.png) – бонус первого вида. Если объект игрока соприкасается с этим бонусом, игроку начисляется 100 очков.

Бонус №2 (bonus2.png) – бонус второго вида. Если объект игрока соприкасается с этим бонусом, игроку добавляется 1 "жизнь".

Враг (enemy.png)объект "врага". Если игрок соприкасается с объектом врага – количество "жизней" уменьшается на 1. При количестве жизней меньше 0 игра заканчивается. Если игрок сможет прыгнуть и приземлиться на объект врага – враг будет уничтожен, а игрок получит 50 очков.

Лестница (ladder.png) – игрок может подниматься и опускаться по лестнице там, где другим способом ему не пройти.

Стена (wall.png) – стена. Стена непроницаема для объекта игрока. Объект игрока может подпрыгнуть только тогда, когда снизу находится стена.

Создадим новый стандартный проект, назовем его P5_1. Добавим в папку Content нужные ресурсы. Все объекты (кроме объекта игрока), которыми мы будем пользоваться, имеют размеры 64х64 пикселя, объект игрока имеет размер 32х32 пикселя. Для начала нам нужно разработать систему конструирования игровых уровней, в данном случае – систему конструирования игровых экранов. Мы пользуемся разрешением игрового окна 640х512 пикселей, то есть – 8х10 элементов размера 64х64 пикселя. Игровой экран разбит на 80 ячеек, в каждой из которых может быть один из игровых объектов.

Для хранения информации о содержимом каждой из этих ячеек используем двумерный массив. Каждая ячейка массива соответствует ячейке игрового экрана. Для того, чтобы получить координаты ячейки, соответствующие ячейке массива с индексом (i, j), достаточно умножить каждый из элементов индекса на 64. Верхней левой ячейке экрана соответствует элемент массива с индексом (0, 0), ячейке в правом нижнем углу – элемент (7,9).

Мы назвали этот массив Layer, в листинге 9.1. приведен код его инициализации.

Layer = new int[8, 10] { 
   { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
   { 1, 5, 1, 3, 5, 1, 1, 2, 1, 5 }, 
   { 0, 0, 0, 1, 2, 1, 1, 2, 0, 4 }, 
   { 0, 1, 3, 0, 2, 0, 0, 2, 0, 3 }, 
   { 0, 5, 0, 0, 1, 1, 1, 2, 0, 1 }, 
   { 0, 0, 0, 1, 0, 0, 0, 2, 0, 1 },
   { 6, 0, 1, 3, 4, 0, 5, 2, 0, 1 },
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
   };
Листинг 9.1. Код инициализации массива

Для удобства мы расположили код инициализации массива с переходом на новую строки для каждой из его строк. В результате этот код отражает состояние игрового экрана в момент начала игры. Как видите, в ячейках массива расположены целые числа. Каждое из этих чисел символизирует определенный вид объекта, который следует поместить в позицию на экране, соответствующую координатам ячейки.

Alina Lasskaja
Alina Lasskaja

Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить.....