Конструктор DriftSprite() вызывает родительский конструктор Sprite(), создающий основной спрайт, а затем инициализирует специальные переменные класса DriftSprite.
Метод update() – это интересная часть кода класса DriftSprite(). В листинге 12.2 приведен код этого метода.
Листинг 12.2. Метод update() класса DriftSprite перемещает Sprite в произвольном направлении и определяет столкновение со слоем-барьеромpublic void update() {
// временно сохранить положение
int xPos = getX();
int yPos = getY();
// переместить спрайт случайным образом, чтобы создать иллюзию дрейфа
switch (Math.abs(rand.nextInt() % 4)) {
// переместить влево
case 0:
move(-speed, 0);
break;
// переместить вправо
case 1:
move(speed, 0);
break;
// переместить вверх
case 2:
move(0, -speed);
break;
// переместить вниз
case 3:
move(0, speed);
break;
}
// проверить столкновение со слоем-барьером
if ((barrier != null) && collidesWith(barrier, true)) { //Если в новом положении детектировано столкновение, то необходимо вернуть спрайт в предыдущее положение
// переместить спрайт в исходное положение
setPosition(xPos, yPos);
}
// перейти к следующему фрейму анимации спрайта
nextFrame();
}Метод update() начинается с того, что сохраняется положение спрайта, поскольку эта информация может понадобиться позже, если произойдет столкновение спрайта со слоем-барьером. Затем спрайт случайным образом перемещается в одном из четырех возможных направлений: вверх, влево, вправо или вниз. Фрагмент кода в конце метода update() проверяет столкновение спрайта со слоем-барьером, чтобы убедиться, что значение barrier отлично от null. Этот код позволяет ограничивать перемещение спрайтов. Если определено столкновение, то спрайт возвращается в положение, предшествующее смещенному.
Совет Разработчику
Если значение переменной barrier равно null, то спрайт будет ограничен в методе update(). Иначе говоря, вы можете создать свободно перемещающиеся спрайты, для чего конструктору DriftSprite()достаточно передать значение null. Если бы вы захотели добавить в игру High Seas птицу или летающего противника, вероятно, вы бы поступили именно так, ведь для такого объекта земля – не помеха.
Последний фрагмент кода update() класса дрейфующих спрайтов – вызов метода nextFrame(), который просто изменяет текущий фрейм анимации. Помните, что вы можете создавать спрайты и без анимации, в этом случае вызов nextFrame() ничего не изменит.
Новый удобный класс DriftSprite готов к использованию, поэтому можно перейти к рассмотрению кода самой игры. Давайте начнем с переменных.
Объявление переменных класса
Код игры High Seas начинается с установки холста HSCanvas, т. к. этот класс отвечает за всю игровую логику. Поскольку он достаточно большой, мы рассмотрим этот класс по частям. Полный код вы найдете на прилагающемся компакт-диске. Ниже приведены переменные, объявленные в классе холста: