Код обработки ввода реагирует на нажатие клавиши Огонь тоновым сигналом и вызовом метода addMissle(). О том, как работает этот метод, вы узнаете позже в этой главе, а пока важно отметить, что в этот метод передается спрайт игрока. Идея метода addMissle() заключается в том, что он запускает ракету спрайта, который передается в него в качестве параметра. Итак, вы можете вызвать метод addMissle() и передать в него спрайт игрока или пришельца, в результате будет запущена ракета.
Основная работа метода update() – это обновление спрайтов. Приведенный ниже код обновляет спрайты пришельцев и взрывов:
for (int i = 0; i < 3; i++) {
if (blobboSprite[i].isVisible()) {
blobboSprite[i].update();
blobboSprite[i].nextFrame();
}
if (jellySprite[i].isVisible()) { //Обновляются только видимые спрайты
jellySprite[i].update();
jellySprite[i].nextFrame();
}
if (timmySprite[i].isVisible()) {
timmySprite[i].update();
timmySprite[i].nextFrame();
}
if (explosionSprite[i].isVisible()) {
if (explosionSprite[i].getFrame() < 3) //Этот код создает анимацию взрыва, после чего спрайт взрыва исчезает
explosionSprite[i].nextFrame();
else
explosionSprite[i].setVisible(false);
}
}Этот код достаточно прост, здесь обновляются и перемещаются спрайты пришельцев и взрывов. Важно понять, что обновляются только видимые спрайты. Возможно, также важным является и то, что спрайты взрыва скрываются после того, как все фреймы показаны.
Совет Разработчику
Чтобы сделать игру более эффективной и не создавать и не удалять объекты динамически, все спрайты создаются в начале игры, а затем скрываются и отображаются, чтобы создать эффект разрушения. В любой момент в игре «существуют» только видимые спрайты.
Следующий фрагмент метода update() достаточно велик, поскольку в нем реализуется большая часть игровой логики.
Код, о котором я говорю, – это код обновления ракет. Он очень важен, поскольку ход игры зависит от того, с каким спрайтом столкнется ракета – со спрайтом игрока или пришельца. Ниже приведен код, работающий со спрайтами ракет:
for (int i = 0; i < 10; i++) {
if (missileSprite[i].isVisible()) {
// ракета игрока?
if (missileSprite[i].getFrame() == 0) { //Индекс фрейма спрайта ракеты используется для определения типа ракеты
for (int j = 0; j < 3; j++) {
// ракета попала в пришельца Блоббо?
if (blobboSprite[j].isVisible())
if (missileSprite[i].collidesWith(blobboSprite[j], false)) {
// Воспроизвести звук разрушения
try {
Manager.playTone(ToneControl.C4 – 6, 100, 100);
}
catch (Exception e) {
}
// создать взрыв
addExplosion(blobboSprite[j]);
// спрятать спрайт и увеличить счет
blobboSprite[j].setVisible(false); //При столкновении спрайта ракеты игрока со спрайтом пришельца оба спрайта исчезают
missileSprite[i].setVisible(false);
score += 10;
break;
}
// ракета попала в пришельца Джелли?
if (jellySprite[j].isVisible())
if (missileSprite[i].collidesWith(jellySprite[j], false)) {
// воспроизвести звук разрушения
try {
Manager.playTone(ToneControl.C4 – 6, 100, 100);
}
catch (Exception e) {
}
// создать взрыв
addExplosion(jellySprite[j]);
// спрятать спрайт и увеличить счет