Янв
21

AndEngine. Видеоурок

logo_100Лучше один раз увидеть, чем сто раз прочитать :)

Так как у многих читателей моего блога до сих пор остаётся неясным вопрос, как сделать нормальную структуры игры с переключением сцен, я записал видео. Это моё первое видео, строго не судите. Вышло на 32 минуты (очень долго, сам не ожидал). Зато после просмотра многое должно проясниться, я думаю :)

Вообщем в этом видео я создаю проект в Eclipse, подключаею AndEngine GLES2, создаю главную сцену и две вложенных в неё сцены. Объясняю, как переключать сцены, как обрабатывать касания экрана и нажатия на кнопку BACK.

Скачать исходник того, что создано в уроке (исходник немного изменён — я добавил класс GfxAssets, в котором загружаются текстуры. Советую все ваши текстуры в игре загружать именно в этом классе)




71 комментарий к записи “AndEngine. Видеоурок”

  • Замечательно. Все разложено по полочкам.

    Было бы не плохо выложить и исходники.

    • Спасибо. Исходник выложил

  • спасибо за проделанную работу и отличное качество видео!

  • круто, то что нужно...

    ещё хотел спросить DDMS — это плагин отдельный? Он просто для того чтобы смотреть то что происходит на телефоне — на экране и всё?

    • Да, плагин. Входит в Android Tools. Смотреть экран — это так, баловство. Нужен для отладки, создания дампа памяти, отслеживания памяти приложения и много ещё чего. За подробностями сюда

  • Блин вот за это громадное спасибо. Посмотрю

  • Как впечатления от GLES2?

    Проблемы совместимости с устройствами проявляются?

    Как под разные разрешения без эмулятора проверяете?

    • Впечатления — положительные. Загрузка игры стала быстрее раза в 2, при этом загрузка текстур занимает меньше памяти, чем раньше. На совместимость потестить пока особо не удалось — на двух телефонах друзей игра идёт, но на одном (недорогая моделька) — глючат текстуры (графика накладывается кое-где, а потом как-то глюк пропадает).

      Под разные разрешения никак не проверяю, кроме эмуля.

      • Но эмулятор же не работает с GLES2 (и с некоторыми прошивками проблемы возникают, обсуждение: www.andengine.org/forums/...found-t6129.html)?

        Кстати, GLES2 поддерживает аппараты начиная с Android 2.2 (а не как было сказано в начале, 4 и старше), хотя у самой библиотеки на младшие значения не получается менять, уже «прошита» зависимость.

        • Ой, сорри. Действительно, GLES2 я ещё не запускал на эмуле. С Андроид 2.2 — это я знаю, писал как-то в первой статье про это

  • когда уже выйдет «Дед — Беги!» )??

    • Ой, не скоро ещё. Многое ещё не сделано пока :) А откуда узнал про деда? :)

      • на ютуб аккаунте, здесь в видео, итд... )

        Дед четкий вообще получился... Может сделаете просто анонс, ну там скрины пиксель арта, что планируете сделать итд... мне кажется всем будет интересно.

        • Дедулю сейчас делаю на Андроиде. На флэше забросил. Как-нибудь выложу что-нибудь :) Жаль видеокамеры не имею, чтобы снять игровой процесс

  • Скажите пожалуйста, это получается с GLES2 я смогу запустить приложение только с Android 2.2 и выше?

    • Ага

    • Я скажу больше — вам предыдущие версии в 2012 году и не понадобятся, судя по статистике)

  • вы хотели изначально спрайт добавить в Game_Scene... но потом добавили прямоугольник...

    не могли бы вы показать как выглядела бы эта сцена со спрайтом...

    • Ну это надо графику загружать. Разницы-то никакой я не вижу — что спрайт, что прямоугольник. Я показал лишь принцип, остальное — дело за вами

      • вот в этом и вопрос, графику нужно загружать в test_activity, а в том же game_scene — только выводить её?

        • Ага. Или в любом другом месте. Главное чтобы перед созданием спрайта графика уже была загружена :)

  • Было бы неплохо, если бы осветили темы про подгрузку текстур, работу со звуком/музыкой и проигрывания видео.

    • Дак смотрите примеры AndEngineExamples, там вроде всё есть, кроме видео. Про видео я ничего не знаю

  • Почему так сложно делать игры? вообще не понимаю как сделать простенькую игру...

    • Начните с Flash

      • а возможно делать игры на canvas?

  • Спасибо за видео, на нем я начал разбираться в AndEngine!

    Я так понял что движок версии GLES2 не хочет работать на эмуляторе, я даже установил android x86 на виртуальную машину, но результат тот же.

    Может ты знаешь как его можно запустить на эмуляторе или где взять GLES1?

  • Импортировал GLES2 с сайта github.com/nicolasgramlich/AndEngine,

    импортировал пример из видео и выдаётся ошибка на создании прямоугольника

    final Rectangle _sprite = new Rectangle (300, 300, 200, 50)

    Ошибка: "Multiple markers at this line

    — The constructor Rectangle (int, int, int, int) is undefined

    — The method getVertexBufferObjectManager () is undefined for the type "

    Я так понял в конструктор нужно добавить еще 1 параметр.

    • Чем отличается GLES2 от GLES1.

      На сайте code.google.com/p/andengine/, тут всё про GLES1?

      Я так понял, GLES1 уже не активна и не обновляется.

      • Да, всё верно! Про отличия читай на форуме AndEngine в ветке GLES2

    • Нет, видимо траблы с подклчением движка

  • Замечания:

    Именование переменных/методов мягко говоря странное, мне кажется в джаве все таки надо использовать джавовый стиль)

    2 сцены в которых есть одинаковый функционал надо отнаследовать от общего предка, вместо того чтобы копипастить код...

    Scene, false и еще много коммон слов — посмотрите транскрипции как они произносятся, не критично, но для саморазвития) Слух режет просто...

    Состояния игры — намного проще и, что самое главное, правильней — сделать enum'ом...

    Далее... Метод onDestroy вызывать не правильно, его вызовет сама система, когда вы скажете finish () для своей активити.

    А вообще здорово, спасибо за урок, некоторые фичи в AndEngine не особо интуитивны)

    • Во многом согласен. Пишите как хотите, а я буду по своему :) К тому же тут я принцип создания игры на движке показал, а не правильный стиль программинга :)

  • Хотел бы попросить совета. Решил сделать простейшую игру BlackJack. У меня есть 52 текстуры. Каким образом лучше организовать хранение карт (TextureRegion) и привязки к ним значений (весом: 2-10, В, Д, К, Т)?

    • Ну наверно удобнее в массиве хранить спрайты. А TextureRegion's хранить как угодно

  • Уважаемые! Может кто залить или дать ссылку на AndEngine GLES 1 последней версии, не успел скачать по ссылке code.google.com/p/andengine/ , его либо нет, либо я плохо ищу.

    Заранее спасибо!

    • Ссылка всё та же! Движок там всё ещё лежит. Ссылки «Скачать» там нету, нужно качать с помощью клонирования репозитория (например с помощью плагина Mecrcurial или клиента TortoiseHg)

  • Делал по вашем уроку каркас игры с несколькими ценами. У меня есть сцена, на которую при запуске добавляется несколько спрайтов. Так же ставится кнопка «New game». Подскажите, как при ее нажатии рестартануть сцену?

    • Сделать метод «рестарт», в котором приводить все спрайты и настройки в начальное состояние

  • Помоги пожалуйста, не могу разобраться. Я скелет игры сделал на основе твоих исходников. Не могу переделать вот, что: я хочу чтобы когда я в игровой сцене, жму кнопку «назад» и попадаю опять в меню и там жму кнопку «играть» запускалась новая игра, а в твоем варианте просто становится видимой сцена в которой я не доиграл. Я так понимаю, чтобы заново запустить игру нужно где-то убить сцену _Game_Scene и создать новую. но как это сделать и главное где? Где-то в MainState? надо сделать спец. методы которые создают и убивают игровую сцену? а не как сейчас она создается в конструкторе?

    • Так сделай в GameScene метод, который будет сбрасывать все настройки игры в исходное состояние. Иначе никак. И не надо сцену убивать и создавать заново.

      • Получается два аналогичных вопроса. Покажите, пожалуйста, примерный код, как это реализовать.

        • Не покажу :) Что там сложного то? Подумай в ключе «Как сделать рестарт уровня»

  • это кошмар какой-то с обработкой нажатия!

    сдела проект по образу и подобию того что на видео. Решил лишь чуть-чуть поэксперементировать — и на тебе, сразу лажа.

    В общем, например, если в обработке нажатия спрайта добавить такой код:

    _sprite = new Rectangle (50, 50, 120, 220) {

    @Override

    public boolean onAreaTouched (TouchEvent pSceneTouchEvent,

    float pTouchAreaLocalX, float pTouchAreaLocalY) {

    if (pSceneTouchEvent.isActionDown ()) {

    MainScene.showMainMenu ();

    return true;

    }

    return false;

    }

    };

    все работает, о как только if (pSceneTouchEvent.isActionDown ()) { меняю на

    if (pSceneTouchEvent.isActionUp ()) { — все, напрочь перестает реагировать на нажатия

    в чем тут может быть проблема?

  • Будет ли продолжение или блог умер?

    Надеюсь на более углубленные примеры работы с движком.

    • Блог жив. Пока писать некогда

  • Немного об эмуляторе android и запуске AndEngine GLES2 на нём: moregamedev.blogspot.com/...es-intellij.html

  • Получилось собрать GLES2 только на андроиде 4.0. Более ранние компилируются с ошибками. В чем может быть проблема?

    • Проблемы нет. Так и должно быть. Движок использует константы и прочие мелочи из 4.0.

  • Вопрос следующего характера, когда приложение теряет фокус (к примеру, в приложении перехожу по ссылке), я так понимаю, необходимо переопределять onStop, onResume. В этих методах нужно останавливать и запускать движок или делать какие-либо другие манипуляции?

    • С движком ничего не надо делать. Надо только вкл/выкл музыку

  • полезная информация.все понятно и доходчиво.

  • Вот интересует такой вопрос, подскажите, текстуры лучше хранить в png или грузить в pvr?

    • PNG понимают все девайсы, но при загрузке он жрет память. PVR жрет очень мало памяти при распаковке, но его не все девайсы поддерживают

  • Подскажите, пожалуйста, как сделать так, чтобы при переходе из MainMenuScene в GameScene изменялась ориентация экрана?

  • Добрый день. Помогите решить такую проблемку. Есть 2 кирпича + земля. Все обьеты твердые. Кирпич падает на землю, все хорошо без отскоков без деформаций. Второй кирпич падает на 1 кирпич. Получается как будто 2 кирпич упал на подушку — первый кирпич как будто прогнулся. Со временем все выпрямляется (даже видно этот процесс распрямления). Хочется что бы 2 кирпич падал на 1 кирпич как и на землю. Как нужно задать правильно настройки физ мира. Никак не могу подобрать :(.

    • Boris, дай мне свой код как это у тебя получилось))) Может стоит иногда высыпаться и выходить на улицу?

  • Добрый день. Не получается решить проблему: у меня есть массив с текстурами, оттуда я беру рандомную, делаю спрайт и добавляю на слой, затем я очищаю этот слой от спрайтов при помощи detachChildren (). И при новом добавлении следующей рандомной текстуры на тот же слой происходит неотображение спрайта, но характеристики спрайта я могу получить (спрайт создаю как new Sprite (pX, pY, texture.deepCopy ());). В чем может быть ошибка? Спасибо.

    • Скорее всего текстура не подгружена ITexture.load (), если новый спрайт, то возможно не задаете ZIndex и после Scene.sortChildren (). Но это имхо не есть гуд на самом деле, нужно менять подход

      • GLES 1. И ZIndex и sortChildren () применяю. Текстура подгружена, один раз она может показаться, другой раз нет.

  • да и судя по конструктору спрайта вы пользуетесь старым движком?

  • Не получается создать прямоугольник, пишет:

    The constructor Rectangle (int, int, int, int) is undefined

    Скачал исходники, в них та же самая ошибка и причём ещё в спрайте ошибка:

    The constructor Sprite (int, int, ITextureRegion) is undefined

    Движок скачал самый новый GLES2. Искал на форумах, но не нашёл решения данной проблемы. Мне кажется что автор движка переделал конструкцию создания прямоугольников и спрайтов.

    Автор, переделай пожалуйста исходники, а то блин целый час изучал движок, а так и не смог даже простенький квадратик на экран вывести (причём опыт программирования у меня присутствует, несколько лет учился по данной специальности в институте).

    • А скачать примеры AndEngineExamples и посмотреть как оно там все делается трудно разве?

      • Да я скачивал, смотрел, мне там вобще ничего не понятно. Блин corona sdk куда лучше движок, жалко что он платный, я на нём уже игру с несколькими уровнями сделал типа crayon physics deluxe, а на этом даже долбаный квадратик на экран вывести не могу...

  • У меня есть неплохой опыт работы во флеше, довольно хорошо таки знаю as3, и все же так как флеш немного уходит в прошлое, то я решил заняться разработкой игр для андроидов. Хотел бы узнать, можно ли как то перевести код из as3 на java, то есть структура кода будет та же? Вы не подскажите где можно почитать о том как перейти или может лучше сказать, как освоить java, при том что у меня есть опыт as3? Какие то статьи о различии и сходства as3 и java...

    • Различия небольшие есть в синтаксисе. Полностью конвертировать as3 в java не получится. Лично я отлаживаю алгоритмы на as3, а потом руками переписываю на java.

      Например, private var aaa:Number превратится в private float aaa.

      Или public var bbb:uint в public int bbb

      Java очень легко осваивается и очень похож на as3

      • Спасибо большое!

        Еще хотел бы узнать лично ваше мнение: что лучше использовать gles2 или gles1.

        Так как читал статьи, что не всем нравится gles2, у них там есть баги, какие то тормоза при использовании приложения уже на телефоне. Не на всех телефонах работает (о том что с Андроида 2.2 и выше это знаю, но писали на старших версиях тоже может не работать).

        • Лично мне нравится GLES2. В GLES1 тоже немало багов было и есть. Да к тому же GLES1 больше не развивается.

Прокомментировать