Предыдущая Следующая
В приведенном выше исходном коде для каждого спрайта происходит вызов метода Тг^егве^БО и соответственно идет слежение за пересечением всех прямоугольников между собой. Но поскольку мы имеем дело с массивом данных, то весь этот исходный код можно поместить в цикл, как первую часть, так и вторую часть метода Со1Ыз^пз(). В итоге мы значительно уменьшим и упростим исходный код данного метода. Помещаем все в цикл и смотрим, что получилось.
public void Collisions()
/* Первая часть */
// Создаем ограничивающий прямоугольник для платформы bbplatform.Min = new Vector3(platform.spritePosition.X, platform.spritePosition.Y, 0);
bbplatform.Max = new Vector3(platform.spritePosition.X + platform.spriteTexture.Width, platform.spritePosition.Y + platform.spriteTexture.Height, 0);
// Создаем ограничивающие прямоугольники для спрайтов for (int i = 0; bb.Length > i;
{
bb[i].Min = new Vector3(sprite[i].spritePosition.X,
sprite[i].spritePosition.Y, 0); bb[i].Max = new Vector3(sprite[i].spritePosition.X +
sprite[i].spriteTexture.Width / 12,
sprite[i].spritePosition.Y+
sprite[i].spriteTexture.Height, 0);
/* Вторая часть */
// Проверяем столкновения между платформой и спрайтами for (int i = 0; bb.Length > i;
148 Игровые столкновения
if (bbplatform.Intersects(bb[i])) {
sprite[i].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width -
300 - sprite[i].spriteTexture.Width / 12), -500);
И напоследок один небольшой секрет. Когда вы работаете с циклом for, то, как правило, вызов этого цикла происходит следующим образом:
for(int i = 0; 5 > i; {...}
Но есть и другой, более интересный способ создания цикла for:
for(int i = 5; — i >= 0;) {...}
Главным в этой записи является то, что подобная формулировка цикла позволяет работать циклу примерно на 10-13% быстрее, чем его стандартная запись. В компьютерных играх (мощные системные ресурсы) это, конечно, не столь актуально, но вот в мобильных играх я постоянно использую только такую запись.
Теперь вы можете запустить рассматриваемый в этой главе проект и с помощью платформы ловить падающие с неба объекты. Постепенно все становится похожим на действительно полноценную игру. Единственное, что сейчас можно несколько видоизменить, - так это уменьшить ограничивающий прямоугольник для платформы. В частности, сделать его по высоте не в размер всей текстуры платформы, а, скажем, всего в пару пикселей (рис. 10.3). Полный размер высоты платформы кажется несколько большим, и иногда достаточно коснуться падающего объекта боком - и считается, что вы его поймали. Если уменьшить площадь ограничивающего прямоугольника, а именно его боковую часть, то игровой процесс станет более реалистичным. Предыдущая Следующая
|