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

Теперь перейдем к первичной установке всех спрайтов на свои игровые позиции, которые реализованы в методе Initialize().

protected override void Initialize()

{

j = 0;

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

{

sprite[i].spritePosition = new Vector2(rand.Next(10, screenWidth - 150), j = j - 300);

}

base.Initialize();

}

Для инициализации используется цикл. В качестве координаты по оси X для каждого спрайта применяется механизм случайного выбора позиции по ширине игровой области экрана. Этот механизм мы подробно рассмотрели в предыдущем проекте. А вот установка точки отсчета по оси Y проходит в несколько другом ключе с использованием переменной j = j - 300.

Здесь мы используем промежуточную переменную j, которая инициализируется нулевым значением. На каждой итерации цикла значение этой переменной уменьшается на 300 пикселей, что позволяет установить все спрайты как бы друг за другом на расстоянии 300 пикселей, и они не накладываются один на другой (рис. 8.4). Этот простой алгоритм позволяет нам избежать наложений спрайтов друг на друга в начальной стадии инициализации игры.

Далее в методе MoveSprite() переделываем код для движения уже массива объектов, а не одного спрайта.

public void MoveSprite()

{

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

{

sprite[i].spritePosition += sprite[i].speedSprite; if (sprite[i].spritePosition.Y > screenHeight)

{

sprite[i].spritePosition = new Vector2(rand.Next(5 0, screenWidth -

Проект MoveSpriteArray 163

Рис. 8.4. Установка спрайтов на игровые позиции в момент первого запуска игры

зргіге[і].зргігеТехгиге.Іїі0гЬ. / 12 - 50), -500);

Обработка ситуации с выходом спрайта из зоны видимости реализована, как и в предыдущем проекте, но по оси Y задается значение в -500 пикселей. Делается это для того, чтобы уже исчезнувшие с экрана спрайты ставились на новые позиции повыше (или подальше) и дали возможность пройти всем предыдущим спрайтам, еще не достигнувшим конца экрана.

Затем в методе Update() класса Gamel мы вызываем метод UpdateFrame() класса Sprite для обновления анимационной последовательности спрайтов и метод MoveSprite() для движения спрайтов по экрану.

/// <summary>

/// Обновляем состояние игры

164 Движение спрайтов в пространстве

/// <summary>

protected override void Update(GameTime gameTime) {

if (GamePad.GetState(Playerlndex.One).Buttons.Back == ButtonState.Pressed) this.Exit();

double elapsed = gameTime.ElapsedGameTime.TotalSeconds; for (int i = 0; sprite.Length > i;


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

Горяченькое

Друзья

Hosted by uCoz