Предыдущая Следующая
// Создаем ограничивающий прямоугольник для sprite[3] bb[3].Min = new Vector3(sprite[3].spritePosition.X, sprite[3].spritePosition.Y, 0);
bb[3].Max = new Vector3(sprite[3].spritePosition.X + ширина одного фрейма, sprite[3].spritePosition.Y + высота одного фрейма, 0);
// Создаем ограничивающий прямоугольник для sprite[4] bb[4].Min = new Vector3(sprite[4].spritePosition.X, sprite[4].spritePosition.Y, 0);
bb[4].Max = new Vector3(sprite[4].spritePosition.X + ширина одного фрейма, sprite[4].spritePosition.Y + высота одного фрейма, 0);
/* Вторая часть */
// Проверяем пересечение всех назначенных прямоугольников if (bbplatform.Intersects(bb[0]))
{
sprite[0].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width -
300 - sprite[0].spriteTexture.Width / 12), -500);
}
if (bbplatform.Intersects(bb[1]))
{
sprite[1].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width -
300 - sprite[1].spriteTexture.Width / 12), -500);
}
if (bbplatform.Intersects(bb[2]))
{
sprite[2].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width -
300 - sprite[2].spriteTexture.Width / 12), -500);
}
if (bbplatform.Intersects(bb[3]))
{
sprite[3].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width -
300 - sprite[3].spriteTexture.Width / 12), -500);
}
if (bbplatform.Intersects(bb[4]))
{
sprite[4].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width -
300 - sprite[4].spriteTexture.Width / 12), -500);
}
}
Исходный код метода Collisions() делится на два блока, или две разные по своим функциям части. В первой части мы для каждого объекта (платформа и пять спрайтов) создаем ограничивающие прямоугольники. Каждый прямоугольник соответствует размеру конкретно взятого спрайта, возьмем, например, платформу и переменную Min.
bbplatform.Min = new Vector3(platform.spritePosition.X, platform.spritePosition.Y + 25, 0);
В этих строках мы задаем начальную точку отсчета для платформы, что соответствует у нас левому верхнему углу изображения платформы, а затем помещаем это значение в переменную Min. Дополнительно прибавляется еще 25 пикселей к значению по оси Y, чтобы уменьшить ограничивающий прямоугольник, а точнее опустить границу столкновения с платформой. Сделано это потому, что платформа в своей центральной части имеет углубление, и чтобы столкновение было реалистичным, мы уменьшаем прямоугольник (рис. 10.2).
Затем необходимо дорисовать оставшуюся часть ограничивающего прямоугольника, для этого достаточно задать координату для нижнего правого угла прямоугольника и сохранить ее значение в переменой Max. Предыдущая Следующая
|