Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

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

10.1. Структура BoundingBox

В XNA Framework детектором столкновений между объектами может послужить структура BoundingBox. Дословный перевод этой структуры звучит как ограничивающий прямоугольник. Идея определения столкновений структурой BoundingBox состоит в следующем.

В игре создается структурная переменная структуры BoundingBox. Структура BoundingBox в своей сущности описывает невидимый прямоугольник, а значит, структурная переменная представляет этот самый прямоугольник. Размер прямоугольника вы определяете сами с помощью элементов структуры. Далее вы надеваете этот прямоугольник (ограничивающий прямоугольник) на определенный спрайт, максимально подгоняя размер прямоугольника под размер спрайта. То есть фактически размер ограничивающего прямоугольника, представленный переменной структуры BoundingBox, должен соответствовать размеру одного фрейма изображения спрайта.

Такую операцию необходимо проделать с каждым спрайтом, участвующим в обработке событий по столкновению объектов. Затем встроенными механизма-

186 Игровые столкновения

ми структуры BoundingBox вы определяете, пересекаются между собой ограничивающие прямоугольники, надетые на спрайты, или нет. Если пересеклись, то объекты столкнулись, а значит, необходимо выполнять определенные события, если нет, то столкновение не имело места и ничего делать не нужно. Просто, не правда ли?

Создать переменную структуры BoundingBox очень просто, как и просто определить размер ограничивающего прямоугольника, смотрим на приведенный пример блока кода.

// Создаем структурную переменную public BoundingBox bb; // Задаем размер прямоугольника bb.Min = new Vector3(10, 20, 0); bb.Max = new Vector3(60, 80, 0);

Структурные переменные Min и Max определяют две точки в пространстве, на основе которых происходит построение ограничивающего прямоугольника. Точка Min задает левый верхний угол ограничивающего прямоугольника, что соответствует левому верхнему углу изображения. В свою очередь, точка Max определяет правый нижний угол прямоугольника, что уже соответствует правому нижнему углу изображения. На основе этих данных сервисами XNA в пространстве строится прямоугольник. Если этот прямоугольник подогнать к размеру спрайта, то мы получаем тот самый ограничивающий прямоугольник, представленный структурой BoundingBox (рис. 10.1).


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz