Программирование Android и iPhone
Вконтакте Twitter Google+ Facebook RSS
Главная J2ME
Создаем игру с помощью визуальных средств 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);
            } 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. На следующем уроке мы будем работать с таблицей результатов.


 


Баннер

ИНТЕРЕСНОЕ



многоканальный телефон без помех
Новости [1] [2] [3]... / Программинг ( Android/ iOS/ J2ME[1] [2] [3]) / Безопасность / Статьи / Софт ( Android / iOS) / Форум / Архив ( Symbian/ Статьи)
Рейтинг@Mail.ru

MobiLab.ru © 2005-2012
При использовании материалов сайта ссылка на www.mobilab.ru обязательна