Приставки
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 (currentState.Triggers.Right > 0.5f)

{

Ray pickRay = GetPickRay();

Nullable<float> resultO = pickRay.Intersects(bb[0]); if (resultO.HasValue == true)

{

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

ball[0].position.X =rand.Next(-(rand.Next(0, 60)),rand.Next(0,60)); ball[0].position.Y = rand.Next(50, 80); ball[0].position.Z = -(rand.Next(20, 100));

}

Nullable<float> resultl = pickRay.Intersects(bb[1]); if (resultl.HasValue == true)

{

ball[1].position.X =rand.Next(-(rand.Next(0, 60)),rand.Next(0,60)); ball[1].position.Y = rand.Next(50, 80); ball[1].position.Z = -(rand.Next(20, 100));

}

Nullable<float> result2 = pickRay.Intersects(bb[2]); if (result2.HasValue == true)

{

ball[2].position.X =rand.Next(-(rand.Next(0, 60)),rand.Next(0,60)); ball[2].position.Y = rand.Next(5 0, 80); ball[2].position.Z = -(rand.Next(20, 100));

}

}

} }

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

В идеале необходимо придумать и написать более сложную конструкцию кода, где мяч не просто устанавливается на новую позицию на экране телевизора, а именно подбивается вверх на 20-50 пикселей и затем вновь падает. Такой подход будет более реалистичным в игре, но эти действия выполняйте уже сами ;-)

Обработку событий по пересечению сферы и прицела можно также поместить и в цикл, например следующим образом:

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

{

Nullable<float> result = pickRay.Intersects(bb[i]); if (result.HasValue == true)

{

ball[i].position.X =rand.Next(-(rand.Next(0, 60)),rand.Next(0,60)); ball[i].position.Y = rand.Next(50, 80); ball[i].position.Z = -(rand.Next(20, 100));

}

}

Но в дальнейшем мы будем вести подсчет попадания в мячи по каждому отдельному мячу, поэтому нам здесь цикл не подходит.

В результате два рассмотренных метода представляют отлаженный механизм по переносу координат двухмерного прицела в трехмерную плоскость и обработке столкновений между спрайтом и моделью. Этот механизм вам может понадобиться в различных играх, например в шутерах от первого или второго лица, где так же, как и нашей игре, присутствуют двухмерный прицел и множество различных трехмерных моделей.

В листинге 19.1 вы найдете полный исходный код класса Game1, а сам проект - на компакт-диске в папке Code\Chapter19\CursorBall.

//=========================================================================

/// <summary>


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

Горяченькое

Друзья

Hosted by uCoz