Предыдущая Следующая
}
if (bbplatform.Intersects(bb[4]))
{
sprite[4].spritePosition = new Vector2(rand.Next(50, screenWidth -sprite[4].spriteTexture.Width / 12 - 50), -500);
}
}
/// <summary>
/// Рисуем на экране
/// <summary>
protected override void Draw(GameTime gameTime) {
}
Проект Collision 191
Первое, что необходимо сделать в исходном коде класса Gamel, - это создать переменные структуры BoundingBox.
public BoundingBox bbplatform;
public BoundingBox[] bb = new BoundingBox[5];
В первой строке этого кода создается переменная bbplatform структуры BoundingBox, отвечающая за создание ограничивающего прямоугольника вокруг ковра-самолета. Во второй строке блока исходного кода происходит создание массива переменных структуры BoundingBox, состоящей из пяти элементов. Как вы уже догадались, эти пять ограничивающих прямоугольников, или пять структурных переменных bb[0]-bb[4], назначены для имеющихся в игре пяти спрайтов.
После создания переменных структуры BoundingBox необходимо определить размеры ограничивающих прямоугольников для каждого спрайта игры. То есть нужно наложить один конкретный ограничивающий прямоугольник на один конкретный спрайт, четко подогнав его под прямоугольный размер самого спрайта. Более того, необходимо также неотступно следовать за спрайтом, а значит, перемещать ограничивающий прямоугольник в соответствии с изменившимися координатами спрайта, поскольку у нас все спрайты динамичны и двигаются по экрану.
Для этих целей создается отдельный метод Collisions(), который мы будем вызывать непосредственно в игровом цикле. Метод большой и несколько запутанный, поэтому я сейчас его прокомментирую и дополнительно разверну некоторые строки исходного кода с использованием простого языка. Смотрим, что получилось.
public void Collisions()
{
/* Первая часть */
// Создаем ограничивающий прямоугольник для платформы bbplatform.Min = new Vector3(platform.spritePosition.X, platform.spritePosition.Y + 45, 0);
bbplatform.Max = new Vector3(platform.spritePosition.X + platform.spriteTexture.Width, platform.spritePosition.Y + 45 + 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[l] bb[1].Min = new Vector3(sprite[1].spritePosition.X, sprite[1].spritePosition.Y, 0); Предыдущая Следующая
|