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

Целимся и стреляем 315

19.5. Целимся и стреляем

После того как вы сформировали метод GetPickRay() для переноса координат прицела из одной плоскости в другую, можно приступать к работе над вторым методом, который будет обрабатывать уже непосредственно столкновение объектов в пространстве. Для начала объявим в классе Gamel новый объект bb класса BoundingSphere.

public BoundingSphere[] bb = new BoundingSphere[3];

В отличие от класса BoundingBox, с которым мы имели дело во второй части этой книги, класс BoundingSphere создает не ограничивающий прямоугольник или куб, а ограничивающую сферу. Наши модели мячиков круглые, поэтому этот класс подходит для нас как нельзя кстати.

Сейчас давайте «заберемся» прямо в исходный код метода GamePadClick(), который направлен на определение столкновений между прицелом и мячами, и по ходу его изучения прокомментируем суть работы этого метода.

void GamePadClick()

{

Сначала мы получаем состояние джойстика.

GamePadState currentState = GamePad.GetState(Playerlndex.One);

Затем с помощью GamePadThumbSticks.Left задается движение прицела по экрану телевизора.

if(currentState.ThumbSticks.Left.X < -0.65f)

cursor.spritePosition.X -= 10; else if(currentState.ThumbSticks.Left.X > 0.65f)

cursor.spritePosition.X += 10; if(currentState.ThumbSticks.Left.Y > 0.65f)

cursor.spritePosition.Y -= 10; else if(currentState.ThumbSticks.Left.Y < -0.65f)

cursor.spritePosition.Y += 10;

Чтобы прицел не выходил за пределы экрана телевизора, добавим в программу вот такую нехитрую конструкцию кода.

if(cursor.spritePosition.X < 0)

cursor.spritePosition.X = 0; else if(cursor.spritePosition.X > screenWidth — cursor.spriteTexture.Width)

cursor.spritePosition.X = screenWidth - cursor.spriteTexture.Width; if(cursor.spritePosition.Y < 0)

cursor.spritePosition.Y = 0; else if(cursor.spritePosition.Y > screenHight —cursor.spriteTexture. Hight)

cursor.spritePosition.Y = screenHight - cursor.spriteTexture.Hight;

316 Стреляем по целям

В этом блоке кода мы обрабатываем выход прицела за пределы экрана со всех четырех сторон.

Затем в теле метода GamePadClick() создается цикл, где на каждый мячик надевается своя сфера с радиусом, установленным в классе ModelClass.

for (int i = 0; bb.Length > i;

{

bb[i].Center = ball[i].position; bb[i].Radius = ball[i].radius;

}

Далее создается проверка условия для обработки нажатия правой кнопки Triggers.Right. Это условие в переводе на русский язык звучит так. Если правая кнопка Triggers.Right нажата и координаты прицела совпадают с координатами ограничивающей сферы одного из мячей, то происходит выстрел и попадание в цель, а мячик устанавливается на новую позицию на экране.


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

Горяченькое

Друзья

Hosted by uCoz