Создание игр для мобильных телефонов - страница 42



curSlide = 0;

repaint();

break;

}

}


Метод keyPressed() открывает новые горизонты программирования игровых мидлетов – обработку игровых событий. Игровое событие – это особое событие, которое ассоциировано с клавишами, обычно используемыми в играх. Смысл заключается в том, что вы можете привязать действия к определенным клавишам, чтобы настроить пользовательский интерфейс. В методе keyPressed() с помощью метода getGameAction() определяется игровое событие, ассоциированное с клавишами. Константы LEFT и RIGHT используются для описания нажатий клавиш со стрелками влево и вправо. Если значение action совпадает со значением одной из констант, то номер текущего слайда увеличивается или уменьшается, а затем отображается новый слайд.

Листинг 4.3. Так выглядит класс SSCanvas, который выполняет большую часть работы мидлета Slideshow. В листинге 4.3 приведен полный код этого класса:

import javax.microedition.lcdui.*;

import java.io.*;

public class SSCanvas extends Canvas {

private Display display;

private Image[] slides;

private String[] captions = { "Love Circle Bowl", "Double Wide Spine", //Индексы массива соответствуют изображениям

"Flume Zoom Over-vert", "Kulp De Sac Bowl",

"Louie's Ledge" };

private int curSlide = 0;

public SSCanvas(Display d) {

super();

display = d;

// загрузить изображения

try {

slides = new Image[5];

slides[0] = Image.createImage("/LoveCircle.jpg");

slides[1] = Image.createImage("/DoubleWide.jpg");

slides[2] = Image.createImage("/FlumeZoom.jpg");

slides[3] = Image.createImage("/KulpDeSac.jpg");

slides[4] = Image.createImage("/LouiesLedge.jpg");

}

catch (IOException e) {

System.err.println("Failed loading images!");

}

}

void start() {

display.setCurrent(this);

repaint();

}

public void keyPressed(int keyCode) {

// получить игровое событие

int action = getGameAction(keyCode);

// обработать нажатия клавиш

switch (action) {

case LEFT:

if (–curSlide < 0)

curSlide = slides.length – 1;

repaint();

break;

case RIGHT:

if (++curSlide >= slides.length)

curSlide = 0;

repaint();

break;

}

}

public void paint(Graphics g) {

// очистить экран

g.setColor(255, 255, 255); // белый

g.fillRect(0, 0, getWidth(), getHeight());

// вывести текущее изображение

g.drawImage(slides[curSlide], getWidth() / 2, getHeight() / 2,

Graphics.HCENTER | Graphics.VCENTER);

// установить шрифт

Font f = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,

Font.SIZE_MEDIUM);

g.setFont(f);

// вывести текущее содержание

g.setColor(0, 0, 0); // черный

g.drawString(captions[curSlide], getWidth() / 2, 0,

Graphics.HCENTER | Graphics.TOP);

}

}


Чтобы интегрировать холст в мидлет, необходимо создать объект класса SSCanvas в классе SlideshowMIDlet:


private SSCanvas canvas;


Затем в конструкторе класса SlideshowMIDlet эта переменная инициализируется. Полный код мидлета Slideshow приведен в листинге 4.4.

Листинг 4.4. Код мидлета Slideshow

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class SlideshowMIDlet extends MIDlet implements CommandListener {

private SSCanvas canvas; //Использование настраиваемого холста – это уникальный фрагмент кода мидлета

public void startApp() {

if (canvas == null) {

canvas = new SSCanvas(Display.getDisplay(this));

Command exitCommand = new Command("Exit", Command.EXIT, 0);

canvas.addCommand(exitCommand);

canvas.setCommandListener(this);

}

// Start up the canvas

canvas.start();

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}