if (++waterDelay > 3) {
if (++waterTile[0] > 3)
waterTile[0] = 1;
waterLayer.setAnimatedTile(-1, waterTile[0]);
if (–waterTile[1] < 1)
waterTile[1] = 3;
waterLayer.setAnimatedTile(-2, waterTile[1]);
waterDelay = 0;
}В случае анимации водного слоя каждый из двух анимационных элементов изменяет свой вид. Обратите внимание, что анимация слоя выполняется в противоположных направлениях, для того чтобы элементы слоя не были одинаковыми. Это очень важно, поскольку они используют одинаковый набор изображений.
Вывод игрового экрана
Благодаря менеджеру слоев вывод игрового экрана весьма прост. В листинге 12.3 приведен код метода draw класса HSCanvas.
Листинг 12.3. Метод draw класса HSCanvas выводит информационную строку, игровые слои и строку «Game Over» при необходимостиprivate void draw(Graphics g) {
// вывести информационную строку, оставшуюся энергию и число спасенных пиратов
g.drawImage(infoBar, 0, 0, Graphics.TOP | Graphics.LEFT);
g.setColor(0, 0, 0); // черный
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM));
g.drawString("Energy:", 2, 1, Graphics.TOP | Graphics.LEFT);
g.drawString("Pirates saved: " + piratesSaved, 88, 1, Graphics.TOP |
Graphics.LEFT);
g.setColor(32, 32, 255); // синий //Справа от текста Energy вывести оставшуюся энергию как синий прямоугольник
g.fillRect(40, 3, energy, 12);
// вывести слои
layers.paint(g, 0, infoBar.getHeight);
if (gameOver) {
// вывести сообщение об окончании игры и набранные очки
g.setColor(255, 255, 255); // white
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE));
g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_MEDIUM)); //Вывести число спасенных пиратов
if (piratesSaved == 0)
g.drawString("You didn\'t save any pirates.", 90, 70,
Graphics.TOP | Graphics.HCENTER);
else if (piratesSaved == 1)
g.drawString("You saved only 1 pirate.", 90, 70,
Graphics.TOP | Graphics.HCENTER);
else
g.drawString("You saved " + piratesSaved + " pirates.", 90, 70,
Graphics.TOP | Graphics.HCENTER);
}
// вывести графику
flushGraphics;
}