Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

192 Игровые столкновения

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);

// Создаем ограничивающий прямоугольник для 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(5 0, screenWidth -sprite[0].spriteTexture.Width / 12 - 50), -500);

}

if (bbplatform.Intersects(bb[1]))

{

sprite[1].spritePosition = new Vector2(rand.Next(5 0, screenWidth -sprite[1].spriteTexture.Width / 12 - 50), -500);

}

if (bbplatform.Intersects(bb[2]))

{

sprite[2].spritePosition = new Vector2(rand.Next(5 0, screenWidth -sprite[2].spriteTexture.Width / 12 - 50), -500);

}

if (bbplatform.Intersects(bb[3]))

{

sprite[3].spritePosition = new Vector2(rand.Next(5 0, screenWidth -sprite[3].spriteTexture.Width / 12 - 50), -500);

}

if (bbplatform.Intersects(bb[4]))

{

sprite[4].spritePosition = new Vector2(rand.Next(5 0, screenWidth -sprite[4].spriteTexture.Width / 12 - 50), -500);

}

}

Проект Collision 193

Исходный код метода Collisions() делится на два блока, или две разные по своим функциям части. В первой части мы для каждого объекта (ковер-самолет и пять спрайтов) создаем ограничивающие прямоугольники. Каждый прямоугольник соответствует размеру конкретно взятого спрайта, возьмем, например, ковер-самолет и переменную Min.

bbplatform.Min = new Vector3(platform.spritePosition.X, platform.spritePosition.Y + 45, 0);

В этих строках мы задаем начальную точку отсчета для платформы, что соответствует у нас левому верхнему углу изображения платформы, а затем помещаем это значение в переменную Min. Дополнительно прибавляются еще 45 пикселей к значению по оси Y, чтобы уменьшить ограничивающий прямоугольник, а точнее опустить границу столкновения с ковром. Сделано это потому, что ковер-самолет в своей центральной части имеет углубление, и чтобы столкновение было реалистичным, мы уменьшаем прямоугольник (рис. 10.2).


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz