|
Вообще логика игры довольно проста: Duke ходит по лабиринту в поисках Джеймса, который где-то потерялся. Когда Duke находит Джеймса игра заканчивается. На прошлом уроки мы подготовили все необходимые спрайты и нарисовали лабиринт.
Duke может двигаться влево и вправо. Он может прыгать. Когда у него под ногами
не оказывается пола - он падает, весело размахивая ручками. В основе кода управления
нашим персонажем лежит статья "Creating Mobile Games:
Using Java ME Platform to Put the Fun into Your Mobile Device and Cell Phone", которую Вы без
труда можете найти в интернете.
Шаг 1: Инициализируем MazeManager
В пакете org.netbeans.j1.game.logic содержатся классы, которые упрощают создание игры. Класс GameTread.java
запускается в отдельном потоке. Это делается для того, чтобы избежать блокирования интерфейса пользователя.
Класс MazeManager.java отслеживает столкновения спрайтов между собой, а также с элементами TiledLayer.
-
Прежде всего, мы должны инициализировать игровую часть. Скопируйте и вставьте выделенный жирным код в метод init класса MazeManager.
public void init() throws Exception {
//TODO: [Exercise 3][step 1] - Код инициализации.
//Пожалуйста не забудьте добавить необходимые библиотеки в import
mazeDesign = new MazeGameDesign(); //[Exercise3]
jamesSprite = mazeDesign.getJamesS();//[Exercise3]
dukeSprite = mazeDesign.getDukeS();//[Exercise3]
dukeSprite.defineReferencePixel(dukeSprite.getWidth() / 2, 0);//[Exercise3]
dukeSpriteAnimator = new SpriteAnimationTask(dukeSprite, false);//[Exercise3]
myWalls = mazeDesign.getMaze1();//[Exercise3]
mazeDesign.updateLayerManagerForLevel1(this);//[Exercise3]
timer = new Timer();//[Exercise3]
timer.scheduleAtFixedRate(dukeSpriteAnimator, 0, mazeDesign.dukeSseq001Delay);
//[Exercise3]
// код устанавливает видимую область экрана с находящимся посередине персонажем
myViewWindowX = dukeSprite.getX() - ((DISP_HEIGHT - SQUARE_WIDTH) / 2);
myViewWindowY = dukeSprite.getY() - ((DISP_HEIGHT - SQUARE_WIDTH) / 2);
System.gc();
}
- Исправьте ошибки в области import. Для этого перейдите на строку с ошибкой и просто нажмите Alt+Enter.
- Создайте новое поле mazeDesign в классе. Для этого можете использовать автоподстановку.
- Игра готова к запуску. Щелкните правой кнопке на проекте MobileGameApp в правой области IDE и выберите Run.
- В появившемся окне эмулятора запустите приложение.
Шаг 2: Учим Дюка ходить
Нам необходимо установить правильную последовательность кадров в спрайте для случаев, когда Duke ходит, прыгает и падает.
- Это делается в классе MazeManager в методе updateSprite. Просто раскомментируйте строки, начиная с //TODO:
[Exercise 3][step 2]. Этот код изменяет последовательность кадров для спрайта duke.
- Исходный код метода updateSprite() должен выглядеть следующим образом. Жирным выделены раскомментированные строки.
private void updateSprite(int hdirection, int vdirection) {
// если duke двигается влево или вправо, мы устанавливаем
// кадр, на котором duke смотрит в правильную сторону.
if (hdirection > 0) {
dukeSprite.setTransform(Sprite.TRANS_NONE);
} else if (hdirection < 0) {
dukeSprite.setTransform(Sprite.TRANS_MIRROR);
}
//в случае, если duke двигается, меняем кадр спрайта на следующий
if (lastHorDirection != hdirection) {
dukeSprite.setFrameSequence(mazeDesign.dukeSseq001);
//TODO: [Exercise 3][step 2] Let the duke move set to vertical sequence
}
if (lastVertDirection != vdirection) {
if (vdirection > 0) { //он прыгает
dukeSprite.setFrameSequence(mazeDesign.dukeSfalling);
//TODO: [Exercise 3][step 2] set to falling sequence
} else if (vdirection < 0) {
dukeSprite.setFrameSequence(mazeDesign.dukeSjumping);
//TODO: [Exercise 3][step 2] set to jumping sequence
}
}
if ((vdirection != 0) || (hdirection != 0)) {
dukeSpriteAnimator.forward();
} else {
dukeSpriteAnimator.setMoving(false);
dukeSprite.setFrameSequence(mazeDesign.dukeSseq001);
//TODO: [Exercise 3][step 2] set to vertical sequence
}
lastHorDirection = hdirection;
lastVertDirection = vdirection;
}
Заключение
Таким образом, мы добавили в игру необходимую логику. Теперь даже можно запустить игру и побегать пол лабиринту.
Как видите все это великолепие работает благодаря Game API. На следующем уроке мы будем работать с таблицей результатов.
|