placeSprite(timmySprite[i]);
timmySprite[i].setVisible(true);
break;
}
break;
}
}
...
Совет Разработчику
Метод placeSprite() вызывается addAlien(), его задача – вычислить случайное положение на игровом экране и поместить в него спрайт. Это вычисление помогает убедиться, что спрайт не будет помещен слишком низко, близко к спрайту автомобиля. Спрайт также размещается подальше от границ экрана, чтобы он сразу не столкнулся с одной из них. Код метода placeSprite() вы можете найти на прилагаемом компакт-диске в коде игры Space Out.
Этот метод случайным образом выбирает тип пришельца, а затем добавляет его спрайт в игру, для чего выполняются следующие шаги:
1. найти подходящий спрайт пришельца, который еще невидим;
2. спрайт помещается в случайное место;
3. показать спрайт.
Подобно тому, как добавляются спрайты пришельцев, метод addMissle() добавляет спрайты ракет. Однако этот метод отличается от addAlien() тем, что в него передается единственный параметр – спрайт, запускающий ракету, чтобы определить тип ракеты. В коде 18.6 приведен код метода addMIssle().
Листинг 18.6. Метод addMissle() класса SOCanvas добавляет ракету так, что создается впечатление, что она запущена спрайтом
private void addMissile(MovingSprite sprite) {
for (int i = 0; i < 10; i++)
if (!missileSprite[i].isVisible()) {
switch (Math.abs(sprite.getXSpeed())) { //Поскольку спрайты игрока и пришельцев имеют различные скорости по оси Х, вы можете использовать значение этой скорости для определения типа запускаемой ракеты
// запустить ракету Блоббо
case 3:
missileSprite[i].setFrame(1);
missileSprite[i].setPosition(sprite.getX() + 5, sprite.getY() + 21);
missileSprite[i].setXSpeed(sprite.getXSpeed() / 2);
missileSprite[i].setYSpeed(5);
break;
// запустить ракету Джелли
case 1:
missileSprite[i].setFrame(2);
missileSprite[i].setPosition(sprite.getX() + 5, sprite.getY() + 21);
missileSprite[i].setXSpeed(0);
missileSprite[i].setYSpeed(4);
break;
// запустить ракету Тимми
case 5:
missileSprite[i].setFrame(3); //Каждый фрейм анимации – это определенный тип ракеты
missileSprite[i].setPosition(sprite.getX() + 5, sprite.getY() + 11);
missileSprite[i].setXSpeed(sprite.getXSpeed() / 2);
missileSprite[i].setYSpeed(3);
break;
// запустить ракету игрока
case 2:
case 4:
missileSprite[i].setFrame(0);
missileSprite[i].setPosition(sprite.getX() + 6, sprite.getY() – 11);
missileSprite[i].setXSpeed(0);
missileSprite[i].setYSpeed(-4);
break;
}
// показать ракету
missileSprite[i].setVisible(true);
break;
}
}
Метод addMissle()принимает спрайт игрока в качестве единственного параметра, создается эффект запуска ракеты указанным спрайтом.
Основная хитрость этого метода – определение типа запускаемой ракеты. Необходим простой и надежный метод определения типа спрайта, запускающего ракету. Хитрость заключается в том, чтобы проверять скорость Х спрайта, поскольку каждый спрайт имеет уникальное значение этой составляющей скорости. Следовательно, оператор условного перехода switch использует именно эту величину для определения типа добавляемой ракеты.
Процесс добавления ракеты содержит следующие этапы:
1. найти подходящий спрайт, который еще невидим;
2. выбрать нужный фрейм спрайтового изображения;
3. поместить ракету в точку, находящуюся рядом с запускающим спрайтом;
4. установить скорость ракеты в зависимости от ее типа;
5. показать ракету.
И наконец, мы подходим к последнему методу игры Space Out, очень похожему на рассмотренные ранее методы addAlien() и addMissle(). В листинге 18.7 приведен код метода addExplosion().
Листинг 18.7. Метод addExplosion() класса SOCanvas добавляет взрыв при разрушении спрайта
private void addExplosion(MovingSprite sprite) {
for (int i = 0; i < 3; i++)
if (!explosionSprite[i].isVisible()) {
// Add an explosion where the moving sprite is located
explosionSprite[i].setFrame(0); //Проверка, что анимация взрыва начинается с первого фрейма
explosionSprite[i].setPosition(sprite.getX(), sprite.getY());
explosionSprite[i].setVisible(true);
break;
}
}
Этот метод добавляет спрайт взрыва на место указанного спрайта игрока или пришельца. Ниже перечислены шаги, выполняемые при добавлении спрайта взрыва:
1. найти подходящий спрайт взрыва, который еще не задействован;
2. установить номер первого фрейма анимации – 0;
3. разместить спрайт взрыва в центре уничтоженного спрайта;
4. показать взрыв.
Метод addExplosion() завершает код игры Space Out. Я представляю, что к разработке кода были приложены титанические усилия, но следующий раздел вознаградит ваши старания!
Тестирование игры
Я уже много раз говорил, что тестирование – это один из самых веселых этапов тестирования игры, а теперь вы подошли к тестированию совершенно новой игры. Подобно игре High Seas, игра Space Out требует значительного времени на тестирование из-за большого числа взаимодействий игровых спрайтов. Самое хорошее, что для тестирования надо просто поиграть в Space Out. На рис. 18.9 показано начало игры, пришелец запускает ракету, автомобиль отвечает огнем.
Читать дальше
Конец ознакомительного отрывка
Купить книгу