Иллюстрированный самоучитель по программированию мобильных телефонов

Анимация в игровом процессе

Анимация в игровом процессе строится на основе последовательной цепочки рисунков. Как вы уже знаете, отдельно взятый рисунок из анимационной последовательности в Java 2 ME называется фреймом. Для того чтобы осуществить плавную анимацию в игре, необходимо выполнить ряд сменяющих друг друга рисунков. Посмотрите на рис. 8.3, где изображен матрос с флажками.

Иллюстрированный самоучитель по программированию мобильных телефонов › Техника создания игр › Анимация в игровом процессе
Рис. 8.3. Анимационная последовательность

На рис. 8.3 все фреймы выполнены в виде горизонтальной цепочки, но это не обязательное условие, можно расположить фреймы любым удобным образом. Не забывайте о том, что отсчет начинается с нуля и идет слева направо и сверху вниз.

Анимация повсеместно используется в компьютерных и мобильных играх. Вы наверно замечали, что при перемещении в игре персонажа, он производит ряд повторяющихся движений, создавая видимость игрового цикла. Такие элементарные движения следствие перехода по имеющимся фреймам исходного изображения. Для этих целей в Java 2 ME имеются специальные методы класса Sprite.

Метод nextFrame () позволяет осуществить переход по всем имеющимся фреймам исходного изображения. Как только достигается последний фрейм, то автоматически происходит переход к первому фрейму с последующим переходом по всей имеющейся последовательности, что обеспечивает цикличность анимации.

Давайте рассмотрим пример использующий анимационную последовательность, изображенную на рис. 8.3. В этом примере на экран выводится изображение матроса и осуществляется цикличный переход По всем имеющимся фреймам, создавая эффект движения матроса, который с помощью семафорной азбуки передает слово "анимация".

В листинге 8.3 дается код примера иллюстрирующего работу анимационной последовательности.

Листинг 8.3. Класс MainGame.

import javax.microedition.lcdui.*;
import javax.microedition.midlet. *;
public class MainGame extends MIDlet implements
CornmandListener
{
// команда выхода
private Command exitMidlet = new Command("Выход",
Command.EXIT, 0);
// объект класса
MyGameCanvas
private MyGameCanvas mr;
public void startApp ()
{
// обрабатываем исключительную ситуацию
try{
// инициализируем объект класса MyGameCanvas
mr = new MyGameCanvas();
// запускаем поток
mr.start();
// добавляем команду выхода
mr.addCommand(exitMidlet);
mr:setCommandListener{this);
/7 отражаем текущий дисплей
Display.getDisplay(this).setCurrent(mr);
}catch (Java.io.lOException zxz) {}; }
public void pauseApp() {}
public void destroyApp(boolean unconditional)
{
// останавливаем потоку
if(mr!= null) mr.stop();
}
public void commandAction(Command c, Displayable d)
{
if (с == exitMidlet)
 {
destroyApp(false);
notifyDestroyedO;
}
 }
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.