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

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

{

sprite[i] = new Sprite(l2, l0);

}

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

Проект MoveSpriteArray 119

Рис. 8.3. Изображения, загружаемые в игру

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

sprite[0] = new Sprite(5, 3);

sprite[1] = new Sprite(8, 2);

sprite[2] = new Sprite(2, 2);

sprite[3] = new Sprite(3, 1);

sprite[4] = new Sprite(15, 2);

После создания массива данных переходим к методу LoadGraphicsContent() и к загрузке в массив данных графических изображений.

sprite[0].Load(content, "Content\\Textures\\0");

sprite[1].Load(content, "Content\\Textures\\1");

sprite[2].Load(content, "Content\\Textures\\2");

sprite[3].Load(content, "Content\\Textures\\3");

sprite[4].Load(content, "Content\\Textures\\4");

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

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

protected override void Initialize() {

j = 0;

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

{

sprite[i].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width - 500), j = j - 300);

}

base.Initialize();

}

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

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


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

Горяченькое

Друзья

Hosted by uCoz