Показаны сообщения с ярлыком настройка. Показать все сообщения
Показаны сообщения с ярлыком настройка. Показать все сообщения

Управление libGDX зависимостями в Gradle

Полезные ссылки

Управление зависимостями в Gradle имеет много различных подходов и легко для понимания. Если вы знакомы с Maven или Ivy, то Gradle полностью совместим с обоими подходами, а также способен поддерживать пользовательские подходы. Если же вы не знакомы с Gradle, то для изучения существуют отличные ресурсы на официальном сайте. Рекомендуется ознакомится с ними для понимания Gradle.

Universal Tween Engine

С переключением libGDX на основную систему сборки Gradle, некоторые пользователи с трудом добавляли Universal Tween Engine к созданному проекту. Эта статья призвана сделать этот процесс как можно менее болезненным.

Статья предполагает, что вы уже создали libGDX проект, используя gdx-setup. Если вы еще не создали свой ​​проект, то прежде чем продолжить следуйте инструкциям по настройки Gradle проекта.

Gradle и командная строка

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

Gradle и NetBeans

После того как вы создали libGDX проект, время начать разработку приложения в NetBeans. Перед тем как импортировать ваш проект в NetBeans, убедитесь, что вы настроили среду разработки

Gradle и Intellij IDEA

После того как вы создали libGDX проект, время начать разработку приложения в Intellij IDEA. Перед тем как импортировать ваш проект в Intellij IDEA, убедитесь, что вы настроили среду разработки

Gradle и Eclipse

После того как вы создали libGDX проект, время начать разработку приложения в Eclipse. Перед тем как импортировать ваш проект в Eclipse, убедитесь, что вы настроили среду разработки

Создание libGDX проекта

libGDX поставляется с файлом под названием gdx-setup.jar, который является исполняемым, включая в себя пользовательский интерфейс и инструменты командной строки. Вы можете просто запустить JAR файл, который откроет пользовательский интерфейс для настройки проекта.

Скачать gdx-setup.jar

Укажите имя вашего приложения, имя Java пакета, имя вашего основного класса, выходную директорию, а также путь к Android SDK. Далее, вы можете выбрать какие платформы вы хотите поддерживать.

Настройка среды разработки

libGDX проекты используют Gradle для управления зависимостями, процессом сборки и интеграцией со средой разработки. Это позволяет разрабатывать приложение в любой предпочтенной вами среде разработки. Во время работы над одним проектом, разработчики в команде могут использовать разные среды разработки. Для этого, просто не загружайте файлы конкретной среды разработки в репозиторий приложения. В libGDX есть файл .gitignore, который заботится об этом, если вы использует Git как систему контроля версий

Starter классы и конфигурация

Для каждой платформы должен быть написан Starter класс. Этот класс создает экземпляр конкретной back-end реализации Application и ApplicationListener реализует логику приложения. Starter классы зависят от платформы. Далее будет рассмотрено, как создать экземпляр и настроить его для каждого back-end.

Эта статья предполагает, что вы ознакомлены с инструкциями настройки проекта и имеете импортированные Core, Desktop, Android и HTML5 проекты в Eclipse.

Desktop (LWJGL)

При открытии Main.java класса в my-gdx-game проекте можно увидеть следующее:

package com.me.mygdxgame;

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;

public class Main {
   public static void main(String[] args) {
      LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
      cfg.title = "my-gdx-game";
      cfg.useGL20 = false;
      cfg.width = 480;
      cfg.height = 320;
                
      new LwjglApplication(new MyGdxGame(), cfg);
   }
}

Сначала создается экземпляр LwjglApplicationConfiguration. Этот класс позволяет задать различные параметры конфигурации, такие как начальный размер экрана, использование OpenGL ES 1.x или 2.0 и так далее.

Как только указан объект конфигурации, создается экземпляр LwjglApplication. MyGdxGame класс представляет реализацию ApplicationListener и логики приложения.

Начиная с этого момента, будет создано окно приложения и будут вызываться методы ApplicationListener, как описано в жизненном цикле приложения.

Android

Android приложение не использует main() метод как точку входа, но вместо этого требуется Activity. Откройте MainActivity.java класс в my-gdx-game-android проекте.

package com.me.mygdxgame;

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class MainActivity extends AndroidApplication {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = false;
        
        initialize(new MyGdxGame(), cfg);
    }
}

Главная точка входа - onCreate() метод Activity класса. Обратите внимание, что MainActivity наследуется от AndroidApplication класса, который сам наследуется от Activity. Как и для Desktop starter класса задается конфигурация через создание экземпляра класса AndroidApplicationConfiguration. После настройки вызывается initialize() метод класса AndroidApplication и ему передается ApplicationListener(MyGdxGame).

Android приложения могут иметь несколько Activity. libGDX игры обычно должны состоять из одной Activity. Разные экраны игры реализуются с помощью libGDX, а не как отдельные Activity. Причина этого в том, что создание новой Activity предполагает создание нового OpenGL контекста, который занимает много времени и вызывает перезагрузку всех графических ресурсов.

Файл AndroidManifest.xml

Кроме AndroidApplicationConfiguration настройки, Android приложение также настраивается через AndroidManifest.xml файл, находящийся в корневой директории Android проекта. Он может выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.me.mygdxgame"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape"
            android:configChanges="keyboard|keyboardHidden|orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Целевая версия SDK

Крайне важно задать targetSdkVersion больше или равной 6, если приложение должно работать на версии выше, чем 1.5. Если этот атрибут не задан, то приложение запуститься с высшей версией Android в режиме совместимости. Размеры области рисования будут меньше чем фактическое разрешение экрана.

Ориентация экрана и изменение конфигурации

В дополнение к targetSdkVersion должны быть установлены атрибуты screenOrientation и configChanges.

ScreenOrientation атрибут определяет фиксированную ориентацию экрана приложения. Можно не задавать, если приложение может работать в landscape и portrait режиме.

ConfigChanges атрибут имеет важное значение и всегда должен быть задан как указано выше. Отсутствие этого атрибута означает, что приложение будет перезагружаться каждый раз, когда показывается или скрывается физическая клавиатура или изменяется ориентация устройства. Если ScreenOrientation атрибут не задан, то libGDX приложение будет принимать вызовы ApplicationListener.resize() метода, чтобы уведомить об изменении ориентации.

Права и разрешения

Если приложение должно иметь возможность записи во внешнее хранилище устройства (например, на SD карту), иметь доступ в интернет, использовать вибратор, не давать экрану входить в спящий режим, записывать звук, то нужно добавить следующие разрешения в AndroidManifest.xml файл:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>  

Обычно пользователи относятся с подозрением к приложению с множеством разрешений.

Для того, чтобы работал экран блокировки, нужно установить AndroidApplicationConfiguration.useWakeLock в true значение.

Если игра не нуждается в доступе к акселерометру или компасу, то рекомендуется отключить их, установив useAccelerometer и useCompass поля AndroidApplicationConfiguration в значение false.

Пожалуйста, обратитесь к руководству Android разработчика для получения дополнительной информации о том, как установить другие атрибуты, такие как иконка для вашего приложения.

Живые обои

libGDX имеет простой в использовании способ создавать живые обои для Android. Starter класс для живых обоев называется AndroidLiveWallpaperService, вот простой пример:

package com.mypackage;

// imports snipped for brevity 

public class LiveWallpaper extends AndroidLiveWallpaperService {
        @Override
        public ApplicationListener createListener () {
                return new MyApplicationListener();
        }

        @Override
        public AndroidApplicationConfiguration createConfig () {
                return new AndroidApplicationConfiguration();
        }

        @Override
        public void offsetChange (ApplicationListener listener, float xOffset, float yOffset, float xOffsetStep, float yOffsetStep,
                int xPixelOffset, int yPixelOffset) {
                Gdx.app.log("LiveWallpaper", "offset changed: " + xOffset + ", " + yOffset);
        }
}

Методы createListener() и createConfig() будут вызываться, когда живые обои показываются в просмотре или при их создании на главном экране.

Метод offsetChange() масштабируется, когда пользователь пролистывает экраны на главном экране и сообщает вам насколько экран смещен от центра экрана. Этот метод будет вызываться в потоке визуализации, так что вам не нужно заботиться о синхронизации.

В дополнение к Starter классу, вы также должны создать XML файл, описывающий ваши обои. Назовите файл, к примеру, livewallpaper.xml. Создайте директорию с именем XML в res директории Android проекта и поместите в нее файл (res/xml/livewallpaper.xml). Вот пример содержимого файла:

<?xml version="1.0" encoding="utf-8"?>
<wallpaper
       xmlns:android="http://schemas.android.com/apk/res/android"  
       android:thumbnail="@drawable/ic_launcher"
       android:description="@string/description"
       android:settingsActivity="com.mypackage.LivewallpaperSettings"/>

Здесь определяется миниатюра для окна выбора живых обоев, описание и Activity, которая будет показана, когда пользователь вызовет меню настроек в окне выбора обоев. Эта должна быть обычная Activity, которая имеет несколько виджетов для изменения настроек, таких как цвет заднего фона и подобные вещи. Вы можете сохранить эти настройки в SharedPreferences и загрузить их позже в ApplicationListener живых обоях через Gdx.app.getPreferences() метод.

Наконец, вы должны будете добавлять некоторые вещи в AndroidManifest.xml файл. Вот пример для приложения живых обоев с Activity простых настроек:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mypackage"
      android:versionCode="1"
      android:versionName="1.0"
      android:installLocation="preferExternal">
        <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14"/>     
        <uses-feature android:name="android.software.live_wallpaper" />
                
        <application android:icon="@drawable/icon" android:label="@string/app_name">
                <activity android:name=".LivewallpaperSettings" 
                                  android:label="Livewallpaper Settings"/>
                
                <service android:name=".LiveWallpaper"
            android:label="@string/app_name"
            android:icon="@drawable/icon"
            android:permission="android.permission.BIND_WALLPAPER">
            <intent-filter>
                <action android:name="android.service.wallpaper.WallpaperService" />
            </intent-filter>
            <meta-data android:name="android.service.wallpaper"
                android:resource="@xml/livewallpaper" />
        </service>                                      
        </application>
</manifest> 

Манифест определяет:

  • Использование особенности живых обоев, смотрите uses-feature.
  • Разрешения для привязки обоев, смотрите android:permission
  • Activity для настроек.
  • Сервис живых обоев, смотрите meta-data.
Живые обои в Android

Живые обои поддерживаются, только начиная с версии Android 2.1 (SDK версия 7).

Живые обои имеют некоторые ограничения относительно сенсорного ввода. В целом только tap и drop будут сообщаться. Установите AndroidApplicationConfiguration # getTouchEventsForLiveWallpaper флаг на true, для получения всех событий от сенсорного экрана.

Daydream

Начиная с Android 4.2 пользователи могут установить Daydream, который показывается когда устройство находится в режиме ожидания. Daydream схож с заставкой на экране и может отображать такие вещи как фото альбомы и так далее. libGDX позволяет с легкостью создать подобные Daydream.

Starter класс для Daydream называется AndroidDaydream. Вот пример:

package com.badlogic.gdx.tests.android;

import android.annotation.TargetApi;
import android.util.Log;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.backends.android.AndroidDaydream;
import com.badlogic.gdx.tests.MeshShaderTest;

@TargetApi(17)
public class Daydream extends AndroidDaydream {
   @Override
   public void onAttachedToWindow() {
      super.onAttachedToWindow();      
          setInteractive(false);

      AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
      cfg.useGL20 = true;
      ApplicationListener app = new MeshShaderTest();
      initialize(app, cfg);
   }
}

Просто наследуйтесь от AndroidDaydream класса, переопределите onAttachedToWindow метод, установите конфигурацию и ApplicationListener и затем инициализируйте Daydream.

В дополнение к Daydream, вы можете предоставить Activity для настроек, которая позволяет пользователю настроить ваш Daydream. Это может быть обычная Activity или libGDX AndroidApplication. Пример пустой Activity:

package com.badlogic.gdx.tests.android;

import android.app.Activity;

public class DaydreamSettings extends Activity {

}

Activity настроек должна быть указана в metadata сервиса Daydream. Создайте xml файл в res/xml директории Android проекта и укажите Activity:

<dream xmlns:android="http://schemas.android.com/apk/res/android"
   android:settingsActivity="com.badlogic.gdx.tests.android/.DaydreamSettings" />
}

В конце добавьте раздел для Activity настроек в AndroidManifest.xml и описание сервиса Daydream:

<service android:name=".Daydream"
   android:label="@string/app_name"
   android:icon="@drawable/icon"
   android:exported="true">
   <intent-filter>
           <action android:name="android.service.dreams.DreamService" />
           <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
   <meta-data android:name="android.service.dream"
           android:resource="@xml/daydream" />
</service>

iOS

iOS back-end опирается на использовании Xamarin's MonoDevelop среды разработки и Monotouch для развертывания. Точкой входа Monotouch приложения является AppDelegate, который можно найти в Main.cs классе проекта. Ниже приведен пример:

using System;
using System.Collections.Generic;
using System.Linq;

using MonoTouch.Foundation;
using MonoTouch.UIKit;
using com.badlogic.gdx.backends.ios;
using com.me.mygdxgame;

namespace com.me.mygdxgame
{               
    public class Application
    {
        [Register ("AppDelegate")]
        public partial class AppDelegate : IOSApplication {
            public AppDelegate(): base(new MyGdxGame(), getConfig()) {

            }

            internal static IOSApplicationConfiguration getConfig() {
                IOSApplicationConfiguration config = new IOSApplicationConfiguration();
                config.orientationLandscape = true;
                config.orientationPortrait = false;
                config.useAccelerometer = true;
                config.useMonotouchOpenTK = true;
                config.useObjectAL = true;
                return config;
            }
        }

        static void Main (string[] args)
        {
            UIApplication.Main (args, null, "AppDelegate");
        }
    }
}

Файл Info.plist

Файл Info.plist содержит информацию о конфигурации приложения: ориентация экрана, минимальная версия операционной системы, дополнительные параметры, скриншоты и так далее. Ниже приведет пример:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDisplayName</key>
    <string>my-gdx-game</string>
    <key>MinimumOSVersion</key>
    <string>3.2</string>
    <key>UIDeviceFamily</key>
    <array>
        <integer>2</integer>
        <integer>1</integer>
    </array>
    <key>UIStatusBarHidden</key>
    <true/>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</dict>
</plist>

Файл convert.properties

Процесс преобразования необходим для создания сборки Monotouch iOS платформы. Эта обработка выполнена как часть шага перед сборкой, когда выполняется операция сборки MonoDevelop. Если вы используете сторонние библиотеки или не стандартные расположение некоторых исходников, то нужно обновить convert.properties файл. Пример файла ниже:

SRC =       ../my-gdx-game/src/
CLASSPATH = ../my-gdx-game/libs/gdx.jar
EXCLUDE   =
IN        = -r:libs/ios/gdx.dll -recurse:target/*.class
OUT       = target/my-gdx-game.dll

Этот файл определяет входные файлы для сборки my-gdx-game.dll.

HTML5 GWT

Главной точкой входа HTML5/GWT приложения является GwtApplication. Откройте GwtLauncher.java в my-gdx-game-html5 проекте:

package com.me.mygdxgame.client;

import com.me.mygdxgame.MyGdxGame;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.backends.gwt.GwtApplication;
import com.badlogic.gdx.backends.gwt.GwtApplicationConfiguration;

public class GwtLauncher extends GwtApplication {
   @Override
   public GwtApplicationConfiguration getConfig () {
      GwtApplicationConfiguration cfg = new GwtApplicationConfiguration(480, 320);
      return cfg;
   }

   @Override
   public ApplicationListener getApplicationListener () {
      return new MyGdxGame();
   }
}

GwtApplication состоит из двух методов: getConfig() и getApplicationListener(). Первый метод должен вернуть экземпляр GwtApplicationConfiguration класса, который определяет различные параметры конфигурации HTML5 приложения. Метод getApplicatonListener для запуска приложения возвращает ApplicationListener.

Файлы модулей

GWT нужен реальный Java код каждого jar файла jar/projtect директории. Кроме того, каждый из файлов должен иметь один модуль определения с gwt.xml суффиксом.

Файл модуля HTML5 проекта может выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd">
<module>
   <inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' />
   <inherits name='MyGdxGame' />
   <entry-point class='com.me.mygdxgame.client.GwtLauncher' />
   <set-configuration-property name="gdx.assetpath" value="../my-gdx-game-android/assets" />
</module>

Этим самым описываются наследование от двух модулей (gdx-backends-gwt и основного проекта), а также точка входа (класс GwtLauncher) и пути относительно HTML5 корневой директории, указывающие на assets директорию.

Оба gdx-backend-gwt.jar и основной проект имеют аналогичный файл модуля, описывающий другие зависимости. Вы не можете использовать файлы в jars/projects, которые не содержат файла модуля и исходников.

Дополнительную информацию о модулях и зависимостях смотрите в руководстве GWT разработчика.

Поддержка Reflection

GWT не поддерживает Java reflection по различным причинам. libGDX имеет внутренний слой эмуляции, который генерирует reflection информацию для некоторых внутренних классов. Это означает, что если вы используете JSON сериализацию libGDX, то вы столкнетесь с проблемами. Вы можете решить их, указав для каких пакетов и классов необходимо сгенерировать reflection информацию. Чтобы сделать это, поместите свойства конфигурации в gwt.xml файл GWT проекта следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<module>
    ... other elements ...
    <extend-configuration-property name="gdx.reflect.include" value="org.softmotion.explorers.model" />
    <extend-configuration-property name="gdx.reflect.exclude" value="org.softmotion.explorers.model.HexMap" />
</module>

Можно указать несколько пакетов и классов добавив еще extend-configuration-property элементов.

Это экспериментальная возможность, используйте ее на свой страх и риск.

Экран загрузки

libGDX HTML5 приложение загружает все asset находящиеся в gdx.assetpath. Во время процесса загрузки отображается экран загрузки, реализованный с помощью GWT виджета. Если нужно изменить экран загрузки, то просто переопределите метод getPreloaderCallback() в GwtApplication классе. В следующем примере рисуется очень простой экран загрузки, используя Canvas:

long loadStart = TimeUtils.nanoTime();
public PreloaderCallback getPreloaderCallback () {
  final Canvas canvas = Canvas.createIfSupported();
  canvas.setWidth("" + (int)(config.width * 0.7f) + "px");
  canvas.setHeight("70px");
  getRootPanel().add(canvas);
  final Context2d context = canvas.getContext2d();
  context.setTextAlign(TextAlign.CENTER);
  context.setTextBaseline(TextBaseline.MIDDLE);
  context.setFont("18pt Calibri");

  return new PreloaderCallback() {
     @Override
     public void done () {
            context.fillRect(0, 0, 300, 40);
     }

     @Override
     public void loaded (String file, int loaded, int total) {
            System.out.println("loaded " + file + "," + loaded + "/" + total);
            String color = Pixmap.make(30, 30, 30, 1);
            context.setFillStyle(color);
            context.setStrokeStyle(color);
            context.fillRect(0, 0, 300, 70);
            color = Pixmap.make(200, 200, 200, (((TimeUtils.nanoTime() - loadStart) % 1000000000) / 1000000000f));
            context.setFillStyle(color);
            context.setStrokeStyle(color);
            context.fillRect(0, 0, 300 * (loaded / (float)total) * 0.97f, 70);

            context.setFillStyle(Pixmap.make(50, 50, 50, 1));
            context.fillText("loading", 300 / 2, 70 / 2);
     }

     @Override
     public void error (String file) {
            System.out.println("error: " + file);
     }
  };
}

Обратите внимание, что для отображения экрана загрузки можно использовать только чистые GWT объекты, использование libGDX API будет доступно после того, как закончится загрузка.

Ручная настройка проекта

Эта статья описывает настройку Eclipse для разработки и запуска libGDX приложения на компьютере и Android.

Android и Java 1.7

В настоящий момент Java 1.7 вызывает проблемы на Android. Пожалуйста, убедитесь, что ваш проект использует Java 1.6. Рекомендуется использовать setup-ui, если вы хотите развертывать приложение на iOS.

Настройка основного или главного проекта

  1. Создайте в Eclipse новый Java проект. File -> New -> Project -> Java Project. Дайте соответствующее название и нажмите Finish.
  2. Перейдите в директорию проекта в файловой системе и создайте поддиректорию с именем libs. Скачайте nightly архив и положите gdx.jar и gdx-sources.jar в libs директорию.
  3. Обновить проект в Eclipse нажатием правой кнопкой мыши на проекте и выберите Refresh F5. Снова нажатием правой кнопкой мыши на проекте и выберите Properties, далее Java Build Path -> Libraries -> Add Jars, выберите gdx.jar и нажмите OK.
  4. Здесь же под gdx.jar файлом выполните двойное нажатие мыши на "Source attachment", далее нажмите Workspace, выберите gdx-sources.jar и нажмите OK.
  5. Выберите вкладку Order and Export, отметьте gdx.jar и нажмите OK.

Шаг 5 позволяют сделать gdx.jar прозрачно зависимым. Это означает, что проекты зависящие от главного, также будут иметь gdx.jar в своем classpath. Однако, это не работает для Android проекта.

Настойка Desktop проекта

  1. Создайте в Eclipse новый Java проект. File -> New -> Project -> Java Project. Дайте соответствующее название (например, gamename-desktop) и нажмите Finish.
  2. Перейдите в директорию проекта в файловой системе и создайте поддиректорию с именем libs. Из nightly архива положите gdx-natives.jar, gdx-backend-lwjgl.jar и gdx-backend-lwjgl-natives.jar в libs директорию.
  3. Обновите проект в Eclipse нажатием правой кнопкой мыши на проекте и выберите Refresh F5. Снова нажатием правой кнопкой мыши на проекте и выберите Properties, далее Java Build Path -> Libraries -> Add Jars, выберите эти JAR файла и нажмите OK.
  4. Выберите вкладку Project, нажмите Add и отметьте основной проект и нажмите OK.

Настройка Android проекта

Перед следующими шагами сначала должен быть установлен Android SDK.

  1. Создайте в Eclipse новый Android проект. File -> New -> Project -> Android Application Project. Дайте соответствующее название (например, gamename-android). При выборе build target отметьте Android 1.5. Укажите имя пакета (например, com.gamename). Далее при создании Activity введите AndroidGame. Нажмите Finish.
  2. Перейдите в директорию проекта в файловой системе и создайте поддиректорию с именем libs. Из nightly архива положите gdx-backend-android.jar и armeabi and armeabi-v7a в libs директорию.
  3. Обновите проект в Eclipse нажатием правой кнопкой мыши на проекте и выберите Refresh F5. Снова нажатием правой кнопкой мыши на проекте и выберите Properties, далее Java Build Path -> Libraries -> Add Jars, выберите gdx-backend-android.jar и нажмите OK.
  4. Снова нажмите Add JARs, выберите gdx.jar под основным проектом и нажмите OK.
  5. Выберите вкладку Projects, нажмите Add, отметьте основной проект и нажмите OK дважды.
  6. Выберите вкладку Order and Export, отметьте основной проект.
Название libs директории

Директория libs не должна иметь другого названия, это обусловлено соглашением для Android Eclipse плагина.

Настройка asset директории

Android проект имеет поддиректорию с именем assets, которая создается автоматически. Файлы в этой директории доступны Android приложению. Это вызывает проблему, потому что эти же самые файлы должны быть доступны и Desktop приложению. Вместо того чтобы делать копию всех файлов, нужно настроить Descktop проект, чтобы он нашел assets в Android проекте.

  1. Нажатием правой кнопкой мыши на проекте и выберите Properties, далее Java Build Path. Выберите вкладку Source и нажмите Link Source, затем Browse, выберите assets директорию Android проекта и нажмите OK.
  2. Укажите assets в качестве имени директории, нажмите Finish и затем OK.

Если Desktop и Android проекты находятся в одной и той же директории, то вы можете использовать "PARENT-1-PROJECT_LOC/gamename-android/assets" локацию для связанной assets директории, где "gamename-android" имя вашего Android проекта. Это лучше чем hard-coded путь, если планируете иметь общий доступ или разделять проект для других проектов.

Создание игры

В вашем главном проекте создайте новый класс. Нажмите правой кнопкой мыши на проект, Project -> New -> Class. Назовите класс "Game" и укажите пакет (например com.gamename). Далее укажите интерфейс ApplicationListener и нажмите OK. Класс будет выглядеть примерно так:

import com.badlogic.gdx.ApplicationListener;

public class Game implements ApplicationListener {
    public void create () {
    }

    public void render () {
    }

    public void resize (int width, int height) {
    }

    public void pause () {
    }

    public void resume () {
    }

    public void dispose () {
    }
}

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

Запуск игры на Desktop

Нажмите правой кнопкой мыши на Desktop проекте Project -> New -> Class. Назовите класс DesktopGame и укажите пакет (например, com.gamename). Созданный класс выглядит так:

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;

public class DesktopGame {
    public static void main (String[] args) {
        new LwjglApplication(new Game(), "Game", 480, 320, false);
    }
}

Этот код создает LwjglApplication экземпляр, давая вашей игре название и размер. Параметр false означает, что не используем OpenGL ES 2.0, а используем 1.0/1.1.

Чтобы запустить игры на Desktop, нажмите правой кнопкой мыши на проекте Project -> Debug As -> Java Application. Вы должны получить в результате черное окно с заголовком "Game".

Запуск игры на Android

Откройте в Android проекте AndroidGame класс, который был создан автоматически и выглядит так:

import com.badlogic.gdx.backends.android.AndroidApplication;

public class AndroidGame extends AndroidApplication {
    public void onCreate (android.os.Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initialize(new Game(), false);
    }
}

Этот код представляет Android Activity, которая инициализируется, передавая экземпляр вашей игры. Вновь параметр false означает, что не используем OpenGL ES 2.0

Чтобы запустить игры на Android, нажмите правой кнопкой мыши на проекте Project -> Debug As -> Android Application. Экран будет черным, так как в игре ничего не происходит. Если во время запуска приложения произойдут ошибки, то они будут показаны в Logcat просмотре, который можно просмотреть, нажимая Window -> Show View -> Other -> Android -> Logcat.

Обновление libGDX

В некоторых случаях вы захотите обновить libGDX до последней версии. Чтобы сделать это скачайте nightly архив и обновите следующие файлы в ваших проектах.

Проект Файлы
Основной libs/gdx.jar
libs/gdx-sources.jar
Android libs/gdx-backend-android.jar
libs/armeabi (directory)
libs/armeabi-v7a (directory)
Desktop libs/gdx-natives.jar
libs/gdx-backend-lwjgl.jar
libs/gdx-backend-lwjgl-natives.jar

Настройка проекта, запуск и отладка

libGDX сильно ориентирован на разработку в Eclipse и как back-end Android и HTML/GWT. В этой статье рассказывается, как настроить libGDX проект в Eclipse. Если вы используете IntelliJ, тогда вам следует посмотреть это руководство как пользоваться libdgx и IntelliJ IDEA. Если вы предпочитаете использовать другие среды разработки, то, пожалуйста, перейдите в конец страницы, чтобы посмотреть детали.

Требования

Для платформ Windows, Linux, Mac OS X, Android и HTML5 вам необходимо:
В добавление к iOS back-end вам необходимо:
  • Мас, так как iOS развертывание не работает на Windows и Linux.
  • Последняя версия XCode, которую можно бесплатно загрузить в OS X App Store.
  • RoboVM, просто установите Eclipse плагин. Не забудьте почаще обновлять его.

Видео урок

Вы может посмотреть видео (на английском), если не хотите читать статью полностью.

Использование libGDX Установщика

Начиная с версия 0.9.3 libGDX поставляется с легким в использовании приложением называем - "Установщик libGDX" от Aurelien Ribon. Следующие шаги описывают все что вам необходимо чтобы разрабатывать для Desckop, Android, iOS и HTML5.

  1. Скачайте dgx-setup-ui.jar. В него входит stable и nightly релиз.
  2. Запустите jar двойным кликом или из командной строки выполнив java -jar gdx-setup-ui.jar
    1. Укажите вашу конфигурацию для проекта (Configuration Panel).
    2. Укажите stable/nightly zip архив ligdgx релиза или нажмите одну из кнопок чтобы скачать последний stable/nightly релиз (Library Selection Panel). Если хотите разворачивать на iOS, то используйте nightlies.
    3. Нажмите на "Generate projects" кнопку (Generation Panel).
  3. Запустите Eclipse и импортируйте сгенерированные проекты в workspace.
    1. File -> Import -> Existing Projects into Workspace.
    2. Нажмите "Browse", укажите директорию со сгенерированными проектами.
    3. Убедитесь в том, что все проекты выбраны и нажмите "Finish".
    4. Чтобы исправить ошибки HTML5/GWT проекта, перейдите к "Problems" просмотру, нажмите правую кнопку мыши на сообщение о ошибки "The GWT SDK JAR gwt-servlet.jar is missing in the WEB-INF/lib directory" и выберите "Quick Fix". Нажмите "Finish".

Структура Проекта

Предположим, вы создали проект с именем "my-gdx-game" в Setup UI и получили 4 проекта.

  • Core проект (my-gdx-game) - содержит весь код нашего приложения, не учитывая так называемые Starter классы. Все другие проекты ссылаются на данный проект. Такой проект обычно называют базовым проектом (core project).
  • Android проект (my-gdx-game-android) - содержит Starter класс и другие необходимые файлы для запуска приложения на Android платформе. В assets директории находятся assets вашего приложения для всех платформ.
  • Desktop проект (my-gdx-game-desktop) - содержит Starter класс для запуска приложения на desktop. Ссылается на asset директорию Android проекта и на основной проект.
  • HTML5 проект (my-gdx-game-html) - содержит Starter класс и другие необходимые файлы для запуска приложения на обычного HTML5 приложения. Ссылается на asset директорию Android проекта (см. gwt.xml файл) и на основной проект.
  • iOS проект (my-gdx-game-ios) - содержит Starter класс и другие необходимые файлы для запуска приложения на обычного iOS приложения. Ссылается на asset/data директорию Android проекта. Проект содержит Ant скрипт, который выполняется перед каждой сборкой, которая компилирует код основного проекта в .Net (.dll файл), который используется при сборки нативного iOS приложения. Пожалуйста, прочитайте эту статью для большей информации о iOS beck-end.

Все ваши asset ресурсы приложения должны храниться в assets директории Android проекта. Desktop, iOS и HTML5 проекты ссылают на эту директорию, так что не нужно дублировать assets ресурсы.

Замечание для iOS

Xamarin Studio не добавляет автоматически файлы, которые вы положили в asset директорию Android проекта. Вы должны добавить их самостоятельно нажав правую кнопку мыши на проекте и связать файлы. Вам далее необходимо установить "Build Action" для каждого нового добавленного файла, иначе файлы не будут включены в финальную сборку. Также, прочитайте эту статью. Вам нужно будет манипулировать скриптами входящими в iOS SDK.

Запуск Проекта

  • Desktop: нажмите правой кнопкой мыши на desktop проекте, Run As -> Java Application. Выберите desktop starter класс (Main.java)
  • Android: Убедитесь что устройство подключено и отображается в DDMS. Если вы не знаете, что это значит, пожалуйста перейдите к руководству по Android . Нажмите правой кнопкой мыши на Android проекте, Run As -> Android Application.
  • iOS: В Xamarin Studio, выберите release или debug profile (симулятор или устройство), затем нажмите на build and run кнопку.
  • HTML5: существует два режима в которых можно запустить приложение:
  1. development/hosted режим: выполняет Java код через GWT плагин and позволяет делать отладку и замену кода.
    1. Нажмите правой кнопкой мыши на HTML5 проекте, Run As -> Web Application.
    2. В "Web Development" просмотре, нажмите на URL. Откроется ваш браузер. Если у вас не установлен GWT плагин, вам будет показано соответствующее сообщение. После установке плагина, просто обновите страницу.
  2. production/web режим: вам нужен будет веб-сервер для выполнения скомпилированных файлов (т.е. Ngnix или браузер способный выполнять JavaScript из локальных файлов.
    1. Нажмите правой кнопкой мыши на HTML5 проекте, Google -> GWT Compile.
    2. Скомпилировав, положите содержимое war/ директории в директорию доступную вашему веб серверу. WEB-INF директория не требуется.
    3. Укажите браузеру URL, который отобразить .html файл.

Отладка Проекта

  • Desktop: Нажмите правой кнопкой мыши на desktop проекте, затем Debug As -> Java Application. Выберите desktop starter класс (т.е. Main.java). Установите нужные breakpoints, заменяйте ваш код (hot swapping), редактируйте и сохраняйте во время отладки для тестирования изменений без перезагрузки приложения.
  • Android: будем считать, что у вас есть подсоединенное устройство, Debug As -> Android Application. Hot swapping не поддерживается, но вы можете использовать DDMS перспективу, чтобы проверить использование памяти и так далее. Перейдите к руководству Android для более детальной информации.
  • iOS: В Xamarin Studio выберите debug profile (симулятор или устройство), затем нажмите build and debug кнопку.
  • HTML5:
  1. development/hosted режим: выполняет Java код через GWT плагин и позволяет делать отладку и горячею замену кода (hot swapping code).
    1. Нажмите правой кнопкой мыши на HTML5 проекте, Debug As -> Web Application.
    2. В "Web Development" просмотре, нажмите на URL. Откроется ваш браузер.
    3. Установите breakpoints в вашем Java коде. Если вы редактируете код и сохраняете изменения, то вам нужно обновить страницу чтобы изменения вступили в силу. По существу это перезапустит ваше приложение. Это гораздо быстрее чем повторная компиляция кода.
  2. production/web режим:
    1. Нажмите правой кнопкой мыши на HTML5 проекте, Google -> GWT Compile.
    2. Измените флаг в "Advanced" на "-strict -draftCompile" и "Output Style" на "detailed". Это создаст читабельный Javascript, который можно сопоставить 1:1 к вашему Java коду.
    3. Скомпилировав, положите содержимое war/ директории в директорию доступную вашему веб-серверу. WEB-INF директория не требуется.
    4. Укажите браузеру URL, который отобразить .html файл.
    5. Откройте Firebug или схожий инструмент отладки, перейдите к JavaScript и установите breakpoints, просматривайте callstack и т.д. Чтобы найти методы Java классов, просто ищите пакет/класс/имя_метода.

Ручная Настройка Проекта

Пожалуйста, перейдите к ручной настройки проекта.