Comments 29
Это просто… просто… Эпичный пост! Поделите на несколько частей, прошу. Где-то на дне третьем-четвёртом начинается взлом мозга и текст перестаёт читаться.

З.Ы. По теме — недавно начал присматриваться к libgdx, тем более (по секрету, никому не говорите), dim_s упоминал о прикрутке оного к Jphp.
Я как статью увидел, тут же появилась мысль переписать эту игру на JPHP в будущем.
Статья в целом вообще радует глаз, даже несмотря на размер. Видно оформление делали с душой.

P.S. Айяйяй палить товарища так =)
Поделите на несколько частей, прошу.
Не надо так!
Где-то на дне третьем-четвёртом начинается взлом мозга и текст перестаёт читаться.
Точите Читайте пореже…
Почему же не надо? Взять к примеру вот это: habrahabr.ru/post/241666/ Помимо того, что читается очень просто и вдохновенно, ещё и каждая статья ожидается, прям как новая серия игры престолов ;)
Потому что не надо ничего ждать. Всё уже есть на месте. Если вам тяжело читать подряд, добавьте в Избранное, и продолжайте чтение, когда вам удобно. Но не надо других удовольствия лишать.
Стандартная практика делать пагинацию для длинных страниц — для слабаков, я уже понял. Просто статья в 124 тысячи 37 пикселя в высоту, лично для меня — слишком много, чтобы запомнить где я закончил читать, увы. Но т.к. это лично моё мнение — пусть оно останется лично моим, может действительно так лучше.
Для этого автор стати был таким молодцом, что аж создал раздел «Содержание» со ссылками! Спасибо вам, eliotik!

SerafimArts, ваши притензии могли бы иметь место, если бы перед нами была огромная простыня текста. Тут же хорошо структурированная статья. Каждый может её читать как ему удобно.
Ого. Действительно огромная статья, но и занимательная. Пост месяца, я б сказал. Спасибо! Как раз интересовал libGDX.

на глаз ширина экрана примерно 135-136 пикселей

Зорький у вас глаз :)
Воу! Серьезный докУмент! Спасибище! :)

PS:
Когда уже придумают заливку данных с компа прямо в мозг?! >__<
Авторы DIY хаба, ну же!
Интересная статья, спасибо. Я использую другой фреймворк для игр и тоже делал клон этой игры. Было интересно узнать и сравнить как то же самое делается в LibGDX и Java. Как и предполагал кода больше, но можно настроить всё намного тоньше.
Спасибо! Именно libGDX сейчас и хочеться поучить. Как всегда, вовремя!
Прочел статью, заметил несколько интересных моментов:

1) Импорт проекта. Как замечено в статье, используется Gradle, поэтому и импортировать проекты нужно именно как Gradle. То есть, нужно установить Gradle плагин, после этого использовать Import->Gradle->Gradle Project. Способ, что в статье, вряд ли будет работать. Еще — скриншоты явно не чистого Eclipse, а Android Studio. Разве что Android Studio автоматически умеет определять тип проекта и импортировать его.
Вот пруф из официальной вики libGDX —

А дальше по тексту сказано — «Откройте gdx-setup-ui.jar, как мы проделали это в Дне 2.». И приводится другой скриншот, из старого установщика. То есть, в libGDX есть два установщика. Устаревший делает все как сказано в туториале сначала, и не требует Gradle. Но у в статье перемешаны скриншоты из нового и старого, а инструкции все для старого.

2) Использование стандартных коллекций — не лучшее решение. В libGDX есть свои коллекции с преферансом и поэтессами. Из плюсов библиотек — они экономнее относятся к памяти (при итерировании for(String s: array) не создается новый итератор, а переиспользуется текущий), интерфейс обьективно удобней (тот же Array можно использовать и как массив, и как стек), удобная работа с пулами (можно сразу освободить Array обьектов в пул).
Ссылка на коллекции в libGDX —

3) Использование Gdx.app.log(«GameScreen FPS», (1/delta) + "") — это «самопальное», хоть и правильное решение. Для этих целей в libGDX есть стандартный класс —

4) «Я забыл упомянуть (вы скорее всего уже и сами поняли), что мы будем использовать Y-Вниз» — по умолчанию в libGDX используется система координат, где (0, 0) — левый нижний угол, то есть У-вверх.

5) Самопальный AssetLoader — это подходит лишь для небольших проектов. В libGDX есть встроенный менеджер ресурсов — AssetManager, который позволяет грузить текстуры, звуки, шрифты и другие ресурсы. Менеджер расширяемый, можно писать свои загрузчики для собственных типов ресурсов. Также он позволяет делать асинхронную загрузку (можно делать загрузочный экран с отображением прогресса). Ссылка —

6) Использование ShapeRenderer — это неэкономичная штука. Если хотите залить задний фон чем-то — лучше используйте для этого SpriteBatch с текстурой. Также совместное использование SpriteBatch и ShapeRenderer может вызвать проблемы. ShapeRenderer рекомендуется использовать для отладки. Вот здесь люди жалуются на медленную скорость работы ShapeRenderer —

Вообще, такое впечатление, что автор статьи использовал какую-то старую версию libGDX. Эту же игру можно было бы очень просто написать, используя Stage и Actor. Отпадает сразу целая куча проблем:

1) Мультиэкранность — Stage умеет автоматически растягивать экран, сохраняя пропорции
2) Проблема с Y-down — не нужно вращать текстуру
3) Удобный ввод — уже реализован удобный UI с кнопочками, скроллами, текстовыми полями и всем таким
4) Tween Engine — не нужно его использовать, есть механизм Actions, который и удобней, и быстрее, и экономичней (Actions возвращаются в пул после использования).

Также я не уловил момента с текстурой. Как я понял, там текстурный атлас — но не увидел файла описания к этому атласу. Если его нет, а мы указываем вручную координаты нужных кусков — это рукалицо. Я так делал когда-то тоже, это получается ужас в сопровождении. Есть утилита GdxTexturePacker — она делает атласы, потом одной строчкой кода они грузятся. Есть встроенные в libGDX классы которые тоже умеют делать атласы.

Использование wav — как по мне, лучше использовать mp3. Банально занимает меньше места, а за счет того, что звуки можно грузить в отдельном потоке, паралельно с текстурами, загрузка не займет больше времени, а результирующий файл игры будет меньше.

Не сочтите, что я придираюсь, это хорошо, что появляются такие статьи. Дело в том, что я пишу на libGDX уже три года, и такие мелочи замечаются на автомате. Данную игру можно сделать за день, используя все возможности libGDX, а не используя его лишь как рендерер.

В общем, за статью как переводчику вам плюс, но данную игру можно было бы написать намного проще. Если кому-то будет интересно — могу на днях написать более правильный, на мое мнение, туториал.

Спасибо за прочтение столь длинной простыни текста!
Спасибо за отличный комментарий! Вчера уже не хватило сил добавить пару слов от себя, но вы полностью правы. Можно было использовать Stage и Actor, а так же вместо UTE использовать Actions, а для UI использовать Scene2D.
Я сейчас сидел дописывал это как эпилог, но ваш комментарий все сделал за меня. Спасибо. Жаль только что ссылки в комментарии съелись.
Если кому-то будет интересно — могу на днях написать более правильный, на мое мнение, туториал.

Было бы великолепно.
Использование wav — как по мне, лучше использовать mp3. Банально занимает меньше места, а за счет того, что звуки можно грузить в отдельном потоке, паралельно с текстурами, загрузка не займет больше времени, а результирующий файл игры будет меньше.

По опыту, лучше использовать ogg. Не знаю как сейчас, а пару лет назад mp3 могло не на всех девайсах работать в libgdx'е
Да, вы правы, я сталкивался с похожей проблемой. Если точнее, у меня mp3 проигрывался лишь раз, а при повторном запуске — тишина. Заменил на ogg — заработало. Не знаю, поправили ли сейчас этот баг.
Напишите, пожайлуста, со всеми сиправлениями и используя возможности libGDX больше.
Это очень интересно.
Я знаю, тут больше про код… Но не могли бы вы дать пару ссылок на хорошие статьи про «разочарование-награда-зависимость»?
Догадываюсь, что даже на хабре были подобные, но не могу найти.

А пост шикарный, да:)
[ sarcasm ]
Если создание игры уровня сложности Flappy Bird порождает такие простыни таинственных манипуляций с инструментами разработки / библиотеками и т.п. (ну вы меня поняли), то создание игр уровня GTA 5 должно простым смертным казаться какой-то rocket science.
[ /sarcasm ]
После небольшого копания в OpenGL мне кажется, что даже просто нарисовать белый кубик — это верх совершенства.

З.Ы. И даже без сарказма, это действительно адъ
Ну наверно это одна из причин, для чего существуют более высокоуровневые библиотеки.
Чтобы я мог написать Кубик.Создайся, Шарик.Создайся, Камера.ЛетайВокруг :)
А в контексте данной статьи я почему-то этой высокоуровневой легкости не ощутил :)
Потому что как всегда, 80% программы — это бизнес-логика, заменить которую фреймом или отдельными библиотеками невозможно по факту, ну разве что заиспользовать редакторы из серии Game Maker
Я попробовал пройти этот туториал, но он реально устарел. libGDX генерит немножко другую структуру, все билдится не так гладко, как хотелось бы, в общем на 6 дне оказалось, что сгенеренные конфиги не могут найти картинку в соседнем модуле, а так как я в мире джавы новичок — не смог даже нормально нагуглить решение.

Прошел седьмой день, включительно, на последнем фреймворке на текущий момент (1.5.6) и полет нормальный. Единственное — у меня трава улетает вниз, но, думаю, это проблема логики.
Я уж думал что это original content. Но к середине статьи закралось сомнение. И оп, точно, перевод!
Но всё равно спасибо за труд!
Only those users with full accounts are able to leave comments. Log in, please.