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

}

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

{

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

}

}

/// <summary>

/// Рисуем на экране

/// <summary>

protected override void Draw(GameTime gameTime) {

}

Проект Collision 191

Первое, что необходимо сделать в исходном коде класса Gamel, - это создать переменные структуры BoundingBox.

public BoundingBox bbplatform;

public BoundingBox[] bb = new BoundingBox[5];

В первой строке этого кода создается переменная bbplatform структуры BoundingBox, отвечающая за создание ограничивающего прямоугольника вокруг ковра-самолета. Во второй строке блока исходного кода происходит создание массива переменных структуры BoundingBox, состоящей из пяти элементов. Как вы уже догадались, эти пять ограничивающих прямоугольников, или пять структурных переменных bb[0]-bb[4], назначены для имеющихся в игре пяти спрайтов.

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

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

public void Collisions()

{

/* Первая часть */

// Создаем ограничивающий прямоугольник для платформы bbplatform.Min = new Vector3(platform.spritePosition.X, platform.spritePosition.Y + 45, 0);

bbplatform.Max = new Vector3(platform.spritePosition.X + platform.spriteTexture.Width, platform.spritePosition.Y + 45 + platform.spriteTexture.Height, 0);

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

// Создаем ограничивающий прямоугольник для sprite[l] bb[1].Min = new Vector3(sprite[1].spritePosition.X, sprite[1].spritePosition.Y, 0);


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

Горяченькое

Друзья

Hosted by uCoz