Программирование двухмерных игр на J2ME - GameManager
ОГЛАВЛЕНИЕ
GameManager
Как подкласс LayerManager , GameManager может управлять группой Слоев, автоматически отображая каждый Слой в назначенном порядке. Метод append (добавить) вызывается для добавления конкретного слоя в LayerManager (средство управления слоями).
private Image shipImage;
private static final String SHIP_IMAGE = "/resource/blue_ship.png";
private static final int SHIP_WIDTH = 40;
private static final int SHIP_HEIGHT = 33;
shipImage = Image.createImage( SHIP_IMAGE );
// создание космического корабля
ship = new SpaceShip(shipImage, SHIP_WIDTH, SHIP_HEIGHT);
// задание его местоположения
ship.setRefPixelPosition(height/2, width/2);
this.append(ship);
Чтобы реагировать на ввод пользователя, мы запрашиваем состояния кнопок с помощью упоминаемого нами экземпляра GameCanvas, используя метод getKeyStates(). Мы реагируем соответствующим образом на каждое состояние кнопки, перемещая корабль в требуемом направлении.
int keyState = gameCanvas.getKeyStates();
// перемещение вправо
if ((keyState & GameCanvas.RIGHT_PRESSED)!= 0){
ship.moveRight(width);
}
// перемещение влево
if ((keyState & GameCanvas.LEFT_PRESSED)!= 0){
ship.moveLeft();
}
// перемещение вверх
if ((keyState & GameCanvas.UP_PRESSED) != 0){
ship.moveUp();
}
// перемещение вниз
if ((keyState & GameCanvas.DOWN_PRESSED) != 0){
ship.moveDown(height);
}
В GameManager мы также проверяем, произошло ли столкновение между кораблем, снарядом и случайным образом созданным врагом (астероидами). Если столкновение произошло, мы изменяем состояние игры в соответствии с этим столкновением.
private Obstacle checkCollisionWithAsteroids(Sprite t) {
for (int i =0; i < MAX_OBS;i++) {
if (obs[i]!=null)
if (obs[i].collidesWith(t, true)) {
return obs[i];
}
}
return null;
}
В случае, если мы достигли условия завершения игры, мы отображаем самое большое число набранных очков и останавливаем поток GameCanvas, используя метод stop (остановить):
protected void endGame(Graphics g) {
GameOver=true;
gameCanvas.stop();
Font f = g.getFont();
int h = f.getHeight()+40;
int w = f.stringWidth("High score")+40;
g.setColor(250,250,250);
g.drawString("Score " + score,(width-w)/2,(height-h)/2,g.TOP | g.LEFT);
}
Что дальше
Используя данные знания, вы сможете создавать простые игры, например: “отправиться на рыбалку”, “лягушка переходит дорогу”. Мы опишем TitledLayer и звук в следующих статьях. Они, несомненно, улучшат внешний вид игры и впечатление от нее.