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

Формируем метод для перемещения моделей 305

Рис. 18.1. Выбор позиции на экране

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

{

world = Matrix.CreateTranslation(ball[i].position); ball[i].DrawModel(world, view, proj);

}

18.5. Формируем метод для перемещения моделей

Теперь пришло время для создания метода, который будет перемещать мячик в пространстве. Здесь алгоритм действий простой: необходимо с помощью ранее созданной переменной speed изменять позицию мячей по оси Y, так, как мы это делали в игре «Летящие в прерии».

void MoveBall()

{

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

{

ball[i].position.Y -= ball[i].speed;

}

}

Мячи в игре падают сверху вниз, а значит, нам нужно отнимать от текущих позиций объектов заданное количество пикселей (15.01/60.01). Метод MoveBall() вызывается в методе Update() класса Оаше1 на каждой новой итерации игрово-

306 Движение моделей в пространстве

го цикла. Каждая новая позиция объекта, представленная переменной position, передается в мировую матрицу, где для движения объекта в работу включается механизм переноса всех вершин модели в пространстве (те самые мировые преобразования).

18.6. Случайный выбор позиции на экране

Движение объектов на экране происходит сверху вниз. Через определенный промежуток времени все мячики исчезнут с экрана; чтобы этого не происходило, добавим в исходный код простой метод под названием GamePadClick().

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

void GamePadClick() {

GamePadState currentState = GamePad.GetState(Playerlndex.One); for (int i = 0; ball.Length > i;

{

if (currentState.Triggers.Right > 0.5f)

{

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));

} }

}

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

ФИа данный момент метод GamePadClick() работает не идеально. Если вы нажмете на правую кнопку Triggers.Right и будете ее удерживать, то мячики постоянно будут изменять свое местоположение, поскольку мы не определили механизм обработки событий для нажатой, но еще не отпущенной кнопки. То есть фактически нажатие сейчас кнопки Triggers. Right запускает своего рода цикл, и пока кнопка нажата, мячики будут менять свое положение в пространстве. Чтобы этого не происходило, нужно создать механизм, который будет реагировать только на единичное нажатие кнопки. Сейчас подобный механизм нам пока не нужен, но уже в следующих главах мы рассмотрим и создадим исходный код для обработки таких игровых ситуаций.


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

Горяченькое

Друзья

Hosted by uCoz