×
Traktatov.net » Создание игр для мобильных телефонов » Читать онлайн
Страница 212 из 246 Настройки

скрыться – сокрытие спрайта по достижении им края экрана;

переместиться – при достижении спрайтом края экрана он появляется у противоположного края;

оттолкнуться – по достижении спрайтом границы экрана направление его движения изменяется на противоположное;

остановиться – если спрайт достигает края экрана, он останавливается.

Все эти случаи реализуются константами класса MovingSprite. Ниже приведены константы и переменные этого класса:

private int xSpeed, ySpeed;

private int action;

private Canvas canvas;

public static final int BA_HIDE = 1; //Эти константы описывают различные действия на границах игрового поля при перемещении спрайтов

public static final int BA_WRAP = 2;

public static final int BA_BOUNCE = 3;

public static final int BA_STOP = 4;

Переменные xSpeed и ySpeed хранят соответствующие компоненты скорости спрайта, которые измеряются в пикселях за один игровой цикл. Переменная action содержит код действия, выполняемого по достижении спрайтом границы экрана – значение одной из констант класса. Поэтому каждый движущийся спрайт по достижении края экрана должен остановиться, появиться у другого края экрана, оттолкнуться или скрыться.

Граница экрана определяется переменной canvas, которая хранит холст, на котором выводится спрайт. Цель этой переменной – создать прямоугольную границу, ограничивающую движения спрайта. Иначе говоря, размеры переменной canvas служат размерами области, в которой может перемещаться спрайт – движение вне области невозможно.

Переменные класса MovingSprite инициализируются конструктором MovingSprite (листинг 18.1).

Листинг 18.1. Конструктор класса MovingSprite создает как анимационный, так и неанимационный спрайт

public MovingSprite (Image image, int xMoveSpeed, Int yMoveSpeed,

int boundsAction, Canvas parentCanvas) {

super(image); //Вызов родительского конструктора Sprite()

// скорость XY

xSpeed = xMoveSpeed;

ySpeed = yMoveSpeed;

// действие при достижении границы экрана

action = boundsAction;

// родительский холст

canvas = parentCanvas;

}

public MovingSprite(Image image, int frameWidth, int frameHeight, int xMoveSpeed,

int yMoveSpeed, int boundsAction, Canvas parentCanvas) {

super(image, frameWidth, frameHeight); //Вызов родительского анимационного конструктора Sprite()

// скорости XY

xSpeed = xMoveSpeed;

ySpeed = yMoveSpeed;

// действие при достижении границы экрана

action = boundsAction;

// родительский холст

canvas = parentCanvas;

}

В классе MovingSprite реализованы два конструктора – для создания анимационного и обычного спрайтов. Оба конструктора вызывают конструктор родительского метода Sprite(), который создает ядро спрайта, после чего выполняется инициализация специфических переменных класса. В отличие от класса DriftSprite, разработанного в главе 12, метод update() в классе MovingSprite удивительно прост:

public void update() {

// Move the sprite based on its speed

move(xSpeed, ySpeed);

// Check for a collision with the screen boundary

checkBounds();

}

Сначала метод update() перемещает спрайт на основании текущей скорости, хранящейся в целочисленных переменных xSpeed и ySpeed. Метод завершается проверкой, находится ли спрайт внутри границ. Это выполняется методом checkBounds(), код которого приведен в листинге 18.2. Листинг 18.2. Метод checkBounds() проверяет столкновение спрайта с границей экрана и в случае столкновения выполняет соответствующие действия