Предыдущая Следующая
Теперь перейдем к первичной установке всех спрайтов на свои игровые позиции, которые реализованы в методе 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; Предыдущая Следующая
|