Игры
libGDX позволяет писать игры для нескольких платформ. Нас интересует Android. Если вы ещё не изучили уроки про создание обычных приложений в Android Studio, то нет смысла сразу изучать этот фреймворк.
Open Source
Игры для изучения.
Chase Whisply
Игра для ловли приведений с использованием виртуальной реальности.

2048
Игра 2048, написанная на Javascript, очень быстро стало популярной. Это порт игры для Android.
iGo
Lights Out
Логическая игра Lights Out, в которой нужно выключить все лампочки. Нажимая на кнопку, вы меняете состояние соседних кнопок на противоположное.
TiltMazes
Логическая игра — нужно провести шарик через лабиринт на базу. Шарик может остановиться, только натолкнувшись на препятствие (убиться об стену). Реагирует на наклоны экрана (опция отключаема).
Колыбель Ньютона
Существует легенда, что Исаак Ньютон (тот самый, на которого упало яблоко) является изобретателем дверцы в нижней части двери, чтобы кошка могла самостоятельно входить и выходить из комнаты. Кроме этого полезного изобретения для котов, Ньютон также придумал Колыбель или Маятник Ньютона для демонстрации преобразования энергии различных видов друг в друга: кинетической в потенциальную и наоборот.
Vector Pinball
dozingcat/Vector-Pinball — пинбол для Android. Автором игры является Brian Nenninger под ником dozingcat. Наш человек.

Asqare
Популярный тип игры, когда надо выстраивать в один ряд одинаковые фигуры.
Создание игры на Android

Представляем вам курс по созданию мобильной 2D игры на Андроид. Игра будет создана на движке Unity. В игре мы реализуем множество концепций игрового движка и познакомимся с разработкой игр на нем.
Видеоурок
Ссылки из видео:
- Скачать игру на Android ;
- Скачать игру на IOS .
Unity – это движок, на котором строится большая часть современных игр на разных платформах. Посредством движка реально создавать игры, ориентированные на запуск на компьютерах (Windows, Linux, MacOS), мобильных телефонах, планшетных компьютерах (Android, iOS) и даже игровых приставках PlayStation, Xbox, Nintendo.
Как создавать игры в Unity?
В основе Unity лежит компонентно-ориентированная концепция. По сути, любая игра состоит из массы объектов, разбавленных дополнительными компонентами. Для примера, во время создания платформера мы создаём GameObject, к нему дополнительно прикрепляем графическую составляющую, что отвечает за отображение персонажа, и управляющий компонент, он обеспечивает управление персонажем за счёт мыши, клавиатуры, джойстика или тачскрина. Движок не накладывает ограничения на количество подобных модулей. К GameObject можем добавить столько компонентов, сколько будет необходимо. Вся работа на движке строится на том самом создании GameObject и применение к ним подходящих компонентов.

Новичков может ввести в заблуждение видимая простота процесса, хотя это не так. Для создания уникальной и популярной игры придётся с нуля писать массу компонентов. Если точнее, в среде Юнити это называется скриптом. Родной язык создания скриптов – C#, но ещё частично используется JavaScript и Boo (обрезанный вариант Python). Создать собственные компоненты нелегко, можно даже сказать – это сложная процедура, напрямую завязанная на классическом программировании. Без наличия достаточного уровня знаний в программировании придётся несладко.
Поддерживаемые платформы
Многие крупные проекты предпочитают Unity из-за огромного списка платформ совместимых с движком. Готовое приложение реально запустить на любой компьютерной операционной системе, популярных мобильных платформах и SmartTV. Что уж говорить, даже браузерные игры и приложения для специфических платформ (вроде Tizen OS) преимущественно разрабатываются на Юнити.
Однако, здесь не всё так гладко. При необходимости можно писать специфические алгоритмы, основанные на низкоуровневом коде, под тот же самый Андроид нужно иметь доскональные знания Java.

То же самое справедливо и в отношении iOS. Ещё одна особенность iOS, что под неё разрабатывать возможно только с компьютера или планшета от Apple. При отсутствии Macbook или аналогичного устройства выпуск игры быстро застопорится и Unity здесь вовсе не причём, Apple сама накладывает подобное ограничение. Вывод прост: если в планах есть iOS-разработка, заранее следует подобрать подходящее устройство для сборки.
Как и где разработать игру на движке?
Длительный процесс разработки игр можем проводить как в рамках Windows, так и Mac OS X. Уже существуют версии редактора под Linux, но рассчитывать на стабильную их работу пока что не приходится. Большую часть времени по созданию игры разработчик проводит внутри редактора Unity. Ещё приходится много времени писать код скриптов, его создавать можем либо в стандартном MonoDevelop, либо в любом редакторе стороннего разработчика. Сейчас активно пользуются Visual Studio, а также Sublime Text, но только при должной настройке.
LibGDX: Урок 3. Создаем простую игру | Делаем android игры
Как сделать игру для андроид с LibGDX – мультиплатформенным фреймворком для создания игр, мы покажем в этом уроке на примере создания простой игры.
Ссылки:
Звуки, текстуры из этой игры: ссылка
Ортографическая камера в LibGDX: ссылка
Управление памятью в LibGDX: ссылка
Полный код игры:
import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.math.Rectangle; import java.util.Iterator; public class Drop extends ApplicationAdapter < OrthographicCamera camera; SpriteBatch batch; Texture dropImage; Texture bucketImage; Sound dropSound; Music rainMusic; Rectangle bucket; Vector3 touchPos; Arrayraindrops; long lastDropTime; @Override public void create () < camera = new OrthographicCamera(); camera.setToOrtho(false, 800, 480); batch = new SpriteBatch(); touchPos = new Vector3(); dropImage = new Texture("droplet.png"); bucketImage = new Texture("bucket.png"); dropSound = Gdx.audio.newSound(Gdx.files.internal("waterdrop.wav")); rainMusic = Gdx.audio.newMusic(Gdx.files.internal("undertreeinrain.mp3")); rainMusic.setLooping(true); rainMusic.play(); bucket = new Rectangle(); bucket.x = 800 / 2 - 64 / 2; bucket.y = 20; bucket.width = 64; bucket.height = 64; raindrops = new Array(); spawnRaindrop(); > private void spawnRaindrop() < Rectangle raindrop = new Rectangle(); raindrop.x = MathUtils.random(0, 800-64); raindrop.y = 480; raindrop.width = 64; raindrop.height = 64; raindrops.add(raindrop); lastDropTime = TimeUtils.nanoTime(); >@Override public void render () < Gdx.gl.glClearColor(0, 0, 0.2f, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); camera.update(); batch.setProjectionMatrix(camera.combined); batch.begin(); batch.draw(bucketImage, bucket.x, bucket.y); for (Rectangle raindrop: raindrops)< batch.draw(dropImage, raindrop.x, raindrop.y); >batch.end(); if(Gdx.input.isTouched()) < touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); camera.unproject(touchPos); bucket.x = (int) (touchPos.x -64 / 2); >if(Gdx.input.isKeyPressed(Input.Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime(); if(Gdx.input.isKeyPressed(Input.Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime(); if (bucket.x < 0) bucket.x = 0; if (bucket.x >800 - 64) bucket.x = 800 - 64; if (TimeUtils.nanoTime() - lastDropTime > 1000000000) spawnRaindrop(); Iterator iter = raindrops.iterator(); while (iter.hasNext()) < Rectangle raindrop = iter.next(); raindrop.y -= 200 * Gdx.graphics.getDeltaTime(); if (raindrop.y + 64 < 0) iter.remove(); if (raindrop.overlaps(bucket))< dropSound.play(); iter.remove(); >> > @Override public void dispose() < super.dispose(); dropImage.dispose(); bucketImage.dispose(); dropSound.dispose(); rainMusic.dispose(); batch.dispose(); >>
Уроки Android Studio: тут
Инструменты android разработчика: тут
Дизайн android приложений: тут
Уроки создания игр для android: тут
Основы программирования на JAVA: тут
Вам також може сподобатися

Продвинутые курсы по разработке мобильных приложений на Android 90 5 913
Как создать свою игру на андроид? Предлагаем пройти продвинутый курс по разработке игры для

Разработка игр для android 2 3 010
Завершающий урок по созданию игры Flappy Bird для android. В этом уроке озвучим игру

Продвинутые курсы по разработке мобильных приложений на Android 78 9 047
Продвинутый курс по созданию игры для android Записывайтесь на курс по разработке игры, своим

Разработка игр для android 2 2 498
Продолжаем делать игру Flappy Bird для android. Для начала немного оптимизируем нашу игру, чтобы

Разработка игр для android 3 2 217
Продолжаем делать игру Flappy Bird для android. На этом уроке реализуем обнаружение столкновений птицы

Разработка игр для android 4 2 393
Продолжаем серию уроков о том, как сделать игру Flappy Bird для android. На этом
Коментарі: 12
А как запустить html вариант?
В видео уроке не увидел когда добавили эту строчку for (Rectangle raindrop: raindrops) <
batch.draw(dropImage, raindrop.x, raindrop.y);
>
Хелп!
На десктопе игра работает отлично, но на андроиде моментально вылетает при запуске.
код ошибки:
09-18 23:49:15.064 6353-6390/info.fandroid.drop E/AndroidRuntime: FATAL EXCEPTION: GLThread 1439
Process: info.fandroid.drop, PID: 6353
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/awt/Rectangle;
at info.fandroid.drop.Drop.create(Drop.java:40)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:275)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1564)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1286)
Caused by: java.lang.ClassNotFoundException: Didn’t find class “java.awt.Rectangle” on path: DexPathList[[zip file “/data/app/info.fandroid.drop-2/base.apk”],nativeLibraryDirectories=[/data/app/info.fandroid.drop-2/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at info.fandroid.drop.Drop.create(Drop.java:40)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:275)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1564)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1286)
Suppressed: java.lang.ClassNotFoundException: java.awt.Rectangle
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
… 5 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available Если не использовать класс Rectangle в приложении то оно запускается (я закомментировал все относящееся к нему и вместо этого просто напрямую отрисовал картинку)
admin (автор)
Запуск на android настраиваем в последних уроках.
Спасибо автору. Строго следовал инструкции. Все запускается на десктопе и на “китайфоне”
.
Давно планировал перетащить свой проект с мёртвого AndEngine на живой движок.
Как я понял – у движка нет альтернативы методам attachChild(IEntity) и т.п. как в AndEngine.
Если же все-таки это как-то реализовано – буду рад подсказке.
Exception in thread “LWJGL Application” com.badlogic.gdx.utils.GdxRuntimeException: Error creating sound com.badlogic.gdx.backends.lwjgl.audio.Wav$Sound for file: waterdrop.wav
at com.badlogic.gdx.backends.lwjgl.audio.OpenALAudio.newSound(OpenALAudio.java:119)
at com.badlogic.gdx.backends.lwjgl.audio.OpenALAudio.newSound(OpenALAudio.java:41)
at ua.org.amt.Drop.create(Drop.java:44)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.badlogic.gdx.backends.lwjgl.audio.OpenALAudio.newSound(OpenALAudio.java:117)
… 4 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error reading WAV file: waterdrop.wav
at com.badlogic.gdx.backends.lwjgl.audio.Wav$WavInputStream.(Wav.java:109)
at com.badlogic.gdx.backends.lwjgl.audio.Wav$Sound.(Wav.java:63)
… 9 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: WAV files must have 16 bits per sample: 8
at com.badlogic.gdx.backends.lwjgl.audio.Wav$WavInputStream.(Wav.java:102)
… 10 more
Виталий, спасибо за статью и видео. Это то, чего мне не хватало для того, чтобы начать программировать под Android.
Может быть знаете почему в desktop приложении звука нет, а на устройстве с android есть.
Cоздание игры в Android Studio. Плюсы и минусы. История и опыт разработки
Если ты вдруг решил создать игру для Android, да еще и свою первую игру, то с чего же ты начнешь? Год назад, я думал, что Android Studio — это лучшая среда разработки для всех андроид приложений, и сейчас, имея полностью готовое приложение в Google Play, готов поделиться опытом.
4.1K открытий
Когда ты первый раз в GameDev, нужно запастись терпением и изучить как можно больше средств и инструментов для создания своей игры, а также осознать свои возможности и средства. В моем случае средств не было, а возможности. . к слову, Java я изучал вместе с изучением Android Studio. Стоит сказать, что Java — это не первый мой язык. До этого я освоил Си и «плюсы», Python и даже Delphi, сейчас о нем никто и не вспомнит, наверное. В общем, программировать я умею и люблю, а на каком языке строится задача, это уже вопрос посредственный.
Что же предлагает мир для разработки приложений под Android? Да на самом деле очень много предлагает, это и Unity и Unreal Engine и набирающий популярность своей простотой Godot, а так же Cocos2d (правда, он только для 2D приложений).
Конечно, если ты еще новичок, то логично будет начать создание с 2D игр, а потом уже решить для себя, оставаться же на 2D или сделать что-то интересное в объемном 3D пространстве.
Дальше встает выбор, насколько крутой проект делать. Мозг обычно создает идеальные образы, и хочется сделать какой-нибудь Сall of Duty или GTA. Но нужно понимать, что AAA-проекты создаются большой командой разработчиков с огромным опытом за спиной, с многомилионными вложениями в проект, в течение 3-5 лет. А так как ты еще новичок, опыта за спиной ноль, то скорее всего ты сдашься в самом начале пути или заблудишься в этой пучине разработки. Потому проект должен быть максимально простой и давать результат. Тогда я решил, что надо придумать проект, который смогу сделать за месяц. Потом сделать еще проект, и еще, постепенно увеличивая сложность разработки. Так появилась идея создать игру Candy Coloration — раскраску для детей. Но спустя некоторое время идея перескочила на пазлы, которые нужно будет собирать с какой-то целью, а не просто так. Так родилась игра Puzzle of Life. Ссылка на игру ниже, если тебе будет интересно.
Казалось бы, просто пазлы, можно наверное сделать за день или неделю. Я же делал год. Конечно, если бы у меня стояли сроки в месяц, то какой никакой результат я бы реализовал. Но я хотел сделать что-то качественное, да и сам процесс мне очень нравился.
По итогу был написан сюжет, с которым игрок знакомится в процессе прохождения игры.
Были реализованы различные режимы игры: на время, на количество перестановок, совместный, а размер и сложность пазлов стал изменяться от эпизода к эпизоду. Все не торопливо выверено и продуманно.
