Приставки
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
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

Затем необходимо дорисовать оставшуюся часть ограничивающего прямоугольника, и для этого достаточно задать координату для нижнего правого угла прямоугольника и сохранить ее значение в переменной Max.

bbplatform.Max = new Vector3(platform.spritePosition.X + platform.spriteTexture.Width,

platform.spritePosition.Y + 45 + platform.spriteTexture.Height, 0);

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

Рис. 10.2. Ограничивающий прямоугольник для ковра-самолета

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

Создание ограничивающих прямоугольников для падающих объектов происходит аналогичным образом, но уже применительно к каждому элементу массива данных.

// Создаем ограничивающий прямоугольник для 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);

При задании значений для переменных Max каждого из прямоугольников спрайта используются не числовые значения, а размер текстуры. Единственное, что нужно помнить, - это то, что при получении ширины изображения вам будет выдан весь фактический размер анимационной последовательности спрайта (все 12 фреймов), поэтому полученное значение необходимо поделить на количество имеющихся фреймов анимации.

Вторая часть метода Collisions() направлена на определение столкновений между ковром-самолетом и каждым спрайтом, падающим с неба. Для этого используется метод Intersects() структуры BoundingBox. В переводе название этого метода обозначает пересечение. То есть этот метод определяет, пересеклись между собой прямоугольники или нет, что равносильно определению столкновения между двумя спрайтами.

if (bbplatform.Intersects(bb[0])) {

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


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

Горяченькое

Друзья

Hosted by uCoz