Вообщелогика игрыдовольно проста: Duke ходит по лабиринту в поисках Джеймса, который где-то потерялся. Когда Duke находит Джеймса игра заканчивается. На прошлом уроки мы подготовили все необходимые спрайты и нарисовали лабиринт.
Duke может двигаться влево и вправо. Он может прыгать. Когда у него под ногами не оказывается пола - он падает, весело размахивая ручками. В основе кода управления нашим персонажем лежит статья"Creating Mobile Games: Using Java ME Platform to Put the Fun into Your Mobile Device and Cell Phone", которую Вы без труда можете найти в интернете.
В пакете 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(); }
Нам необходимо установить правильную последовательность кадров в спрайте для случаев, когда Duke ходит, прыгает и падает.
private void updateSprite(int hdirection, int vdirection){ // если duke двигается влево или вправо, мы устанавливаем // кадр, на котором duke смотрит в правильную сторону. if(hdirection>0){ dukeSprite.setTransform(Sprite.TRANS_NONE); }elseif(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 }elseif(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. На следующем уроке мы будем работать с таблицей результатов.