Предыдущая Следующая
10.1. Структура BoundingBox
В XNA Framework детектором столкновений между объектами служит структура BoundingBox. Дословный перевод этой структуры звучит как ограничивающий прямоугольник. Идея определения столкновений структурой BoundingBox состоит в следующем.
В игре специально создается структурная переменная структуры BoundingBox. Структура BoundingBox в своей сущности описывает невидимый прямоугольник, а значит, структурная переменная и есть тот самый невидимый прямоугольник. Размер прямоугольника вы определяете сами с помощью элементов структуры. Далее вы надеваете это прямоугольник на определенный спрайт, максимально подгоняя размер прямоугольника под размер спрайта. То есть фактически размер ограничивающего прямоугольника, представленный переменной структуры BoundingBox, должен соответствовать размеру одного фрейма изображения спрайта.
Такую операцию необходимо проделать с каждым спрайтом, участвующим в обработке событий по столкновению объектов. Затем встроенными механизмами структуры 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).
Рис. 10.1. Создание ограничивающего прямоугольника
138 Игровые столкновения
Проект Collision 139
Чем плотнее вы наденете ограничивающий прямоугольник на спрайт, тем точнее будет обрабатываться столкновение между объектами. Дополнительно можно искусственно уменьшать или увеличивать ограничивающий прямоугольник, чтобы соответственно уменьшить или увеличить зону столкновения. Здесь все зависит от игровых задач. Например, прямоугольник для платформы мы специально уменьшим, чтобы столкновения были реалистичными. Предыдущая Следующая
|