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