Создаем игру с помощью визуальных средств NetBeans. Урок 3 – Задаем логику управления персонажем

Вообщелогика игрыдовольно проста: 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.

  1. Прежде всего, мы должны инициализировать игровую часть. Скопируйте и вставьте выделенный жирным код в метод init класса MazeManager.

  2. 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();
    }


  3. Исправьте ошибки в области import. Для этого перейдите на строку с ошибкой и просто нажмите Alt+Enter.
  4. Создайте новое поле mazeDesign в классе. Для этого можете использовать автоподстановку.
  5. Игра готова к запуску. Щелкните правой кнопке на проектеMobileGameApp в правой области IDE и выберите Run.
  6. В появившемся окне эмулятора запустите приложение.

Шаг 2: Учим Дюка ходить

Нам необходимо установить правильную последовательность кадров в спрайте для случаев, когда Duke ходит, прыгает и падает.

  1. Это делается в классе MazeManager в методе updateSprite. Просто раскомментируйте строки, начиная с //TODO: [Exercise 3][step 2]. Этот код изменяет последовательность кадров для спрайта duke.
  2. Исходный код метода updateSprite() должен выглядеть следующим образом. Жирным выделены раскомментированные строки.
  3. 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. На следующем уроке мы будем работать с таблицей результатов.




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна