Предыдущая Следующая
Затем необходимо дорисовать оставшуюся часть ограничивающего прямоугольника, и для этого достаточно задать координату для нижнего правого угла прямоугольника и сохранить ее значение в переменной 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); Предыдущая Следующая
|