Предыдущая Следующая
public BoundingBox bbplatform;
public BoundingBox[] bb = new BoundingBox[5];
В первой строке этого кода создается переменная bbplatform структуры BoundingBox, отвечающая за создание ограничивающего прямоугольника вокруг платформы. Во второй строке блока исходного кода происходит создание массива переменных структуры BoundingBox, состоящего из пяти элементов. Как вы уже догадались, эти пять ограничивающих прямоугольников, или пять структурных переменных bb[0]-bb[4], назначены для имеющихся в игре пяти спрайтов.
После создания переменных структуры BoundingBox необходимо определить размеры ограничивающих прямоугольников для каждого спрайта игры. То есть нужно наложить один конкретный ограничивающий прямоугольник на один конкретный спрайт, четко подогнав его под прямоугольный размер самого спрайта. Более того, необходимо также неотступно следовать за спрайтом, а значит, перемещать ограничивающий прямоугольник в соответствии с изменившимися координатами спрайта, поскольку у нас все спрайты динамичны и двигаются по экрану.
144 Игровые столкновения
Проект Collision 145
Для этих целей создается отдельный метод Collisions(), который мы будем вызывать непосредственно в игровом цикле. Метод большой и несколько запутанный, поэтому я сейчас его прокомментирую и дополнительно разверну некоторые строки исходного кода с использованием простого языка. Смотрим, что получилось.
public void Collisions()
{
/* Первая часть */
// Создаем ограничивающий прямоугольник для платформы bbplatform.Min = new Vector3(platform.spritePosition.X, platform.spritePosition.Y + 25, 0);
bbplatform.Max = new Vector3(platform.spritePosition.X + platform.spriteTexture.Width,
platform.spritePosition.Y + 25 + platform.spriteTexture.Height, 0);
// Создаем ограничивающий прямоугольник для sprite[0] bb[0].Min = new Vector3(sprite[0].spritePosition.X, sprite[0].spritePosition.Y, 0);
bb[0].Max = new Vector3(sprite[0].spritePosition.X + ширина одного фрейма, sprite[0].spritePosition.Y + высота одного фрейма, 0);
// Создаем ограничивающий прямоугольник для sprite[1] bb[1].Min = new Vector3(sprite[1].spritePosition.X, sprite[1].spritePosition.Y, 0);
bb[1].Max = new Vector3(sprite[1].spritePosition.X + ширина одного фрейма, sprite[1].spritePosition.Y + высота одного фрейма, 0);
// Создаем ограничивающий прямоугольник для sprite[2] bb[2].Min = new Vector3(sprite[2].spritePosition.X, sprite[2].spritePosition.Y, 0);
bb[2].Max = new Vector3(sprite[2].spritePosition.X + ширина одного фрейма, sprite[2].spritePosition.Y + высота одного фрейма, 0); Предыдущая Следующая
|