Looking for libgdx Keywords? Try Ask4Keywords

libgdxErste Schritte mit libgdx


Versionen

Ausführung Veröffentlichungsdatum
1.9.3 2016-05-16
1.9.5 2016-12-11

Unterstützung für plattformspezifischen Code hinzufügen

LibGDX ist so konzipiert, dass Sie denselben Code schreiben und auf verschiedenen Plattformen bereitstellen können. Es gibt jedoch Zeiten, in denen Sie Zugriff auf plattformspezifischen Code erhalten möchten. Wenn Sie beispielsweise Leaderboards und Erfolge in Ihrem Spiel haben, möchten Sie möglicherweise plattformspezifische Tools (wie Google Play Games) zusätzlich zum lokalen Speichern verwenden. Oder Sie möchten eine Datenbank oder etwas völlig anderes verwenden.

Sie können diese Art von Code nicht zum Kernmodul hinzufügen. Der erste Schritt ist also die Erstellung einer Schnittstelle. Erstellen Sie es im Kernmodul. Diese erste ist ein Dienstprogramm zum Verwalten anderer Schnittstellen:

public interface PlatformWrapper{
    //here you can also add other things you need that are platform specific.
    //If you want to create your own file saver for an instance, a JSON based database,
    //achievements, leaderboards, in app purchases and anything else you need platform specific code for.
    SQLWrapper getSQLSaver();//This one will be used in this example
    AchievementWrapper getAchievementHandler();//this line is here as an example
}
 

Dann müssen wir eine zweite Schnittstelle erstellen, den SQLWrapper. Diese geht auch in das Kernmodul.

public interface SQLWrapper{
    void init(String DATABASE);
    void saveSerializable(int id, Object o);
    Object loadSerializable(int id, Object o);
    void saveString(int id, String s);
    //.... and other methods you need here. This is something that varies
    //with usage. You may not need the serializable methods, but really need a custom method for saving 
    //an entire game world. This part is entirely up to you to find what methods you need
   
    //With these three methods, always assume it is the active database in question. Unless 
    //otherwise specified, it most likely is
    String getActiveDatabase();
    void deleteDatabase();
    void deleteTable(String table);//delete the active table
}
 

Jetzt müssen Sie in jedes Projekt einsteigen und eine Klasse erstellen, um PlatformWrapper zu implementieren, und eine, um SQLWrapper zu implementieren. In jedem Projekt fügen Sie den erforderlichen Code wie Instanzen, Konstruktoren usw. hinzu.

Nachdem Sie alle von Ihnen erstellten Schnittstellen überschrieben haben, stellen Sie sicher, dass alle über eine Instanz in der Klasse verfügen, die PlatformWrapper implementiert (und ein Getter vorhanden ist). Schließlich ändern Sie den Konstruktor in der Hauptklasse. Die Hauptklasse ist die Klasse, auf die Sie vom Startprogramm aus referenzieren. Es erweitert entweder ApplicationAdapter, implementiert ApplicationListener oder erweitert Game. Bearbeiten Sie den Konstruktor und fügen Sie PlatformWrapper als Argument hinzu. Innerhalb des Plattform-Wrappers gibt es zusätzlich zu allen anderen Wrappern (SQL, Erfolge oder andere hinzugefügte Tools) einige Hilfsprogramme (falls Sie welche hinzugefügt haben).

Wenn nun alles korrekt eingerichtet ist, können Sie den PlatformWrapper anrufen und eine der plattformübergreifenden Schnittstellen aufrufen. Rufen Sie eine beliebige Methode auf, und (vorausgesetzt, der ausgeführte Code ist korrekt), werden Sie auf jeder Plattform angezeigt. Er tut, was er mit plattformspezifischem Code tun soll

Vermögensverwalter

Der AssetManager ist eine Klasse, mit der Sie Ihre Assets verwalten können.

Zunächst müssen Sie eine Instanz erstellen:

AssetManager am = new AssetManager();
 

Nachdem dies initialisiert wurde und Sie etwas rendern möchten, möchten Sie die Ressourcen abrufen:

am.load("badlogic.jpg", Texture.class);//Texture.class is the class this asset is of. If it is a 
//sound asset, it doesn't go under Texture. if it is a 3D model, it doesn't go under Texture.class
//Which class added depends on the asset you load

//... other loading here ...//

//when finished, call finishLoading:
am.finishLoading();
 

Nun, wo immer Sie Lust haben, badlogic.jpg bekommen:

Texture texture = am.get("badlogic.jpg");
//Ready to render! The rendering itself is in the normal way
 

Wenn Sie AssetManager verwenden, können Sie sie einmal in den Speicher des AssetManagers laden und dann beliebig oft abrufen.

Warum AssetManager verwenden? (aus dem Wiki ):

AssetManager (Code) unterstützt Sie beim Laden und Verwalten Ihrer Assets. Es ist die empfohlene Methode, um Ihre Assets aufgrund der folgenden Verhaltensweisen zu laden:

  • Das Laden der meisten Ressourcen erfolgt asynchron, sodass Sie während des Ladevorgangs einen reaktiven Ladebildschirm anzeigen können
  • Assets werden nach Referenz gezählt. Wenn zwei Vermögenswerte A und B beide von einem anderen Vermögen C abhängen, wird C erst dann entsorgt, wenn A und B verkauft wurden. Dies bedeutet auch, dass wenn Sie ein Asset mehrmals laden, es tatsächlich geteilt wird und nur einmal Speicher beansprucht!
  • Ein einziger Ort, um alle Ihre Vermögenswerte zu speichern.
  • Ermöglicht die transparente Implementierung von Caches (siehe FileHandleResolver unten)

Installation oder Setup

LibGDX hat ein recht einfaches Setup mit Hilfe eines einfachen Java-Programms. Den Download finden Sie hier . Wenn Sie die Anwendung starten, sieht es ungefähr so ​​aus: Beispiel für den LibGDX-Projektgenerator
Hinweis: Dieser Screenshot wurde unter Linux erstellt und zeigt einen Pfad, der sich von einer Windows-Installation unterscheidet. Das Formular ist jedoch auf jedem Betriebssystem identisch, das mit dieser Setupanwendung kompatibel ist

Eingabefelder

Im Eingabefeld "Name" steht der Name des Spiels für Ihr Projekt. Das Eingabefeld "Package" ist das Paket für Ihre Hauptklasse. Das Eingabefeld "Game Class" ist die Hauptklasse, die aufgerufen wird, wenn Ihr Spiel ausgeführt wird. Das Eingabefeld "Destination" ist das Ziel, an dem Ihr Projekt generiert werden soll. Das Eingabefeld "Andriod SDK" gibt an, wo sich Ihr Android-SDK befindet. Dieses Eingabefeld ist vollständig optional. Wenn Sie Ihre Anwendung nicht für Android bereitstellen möchten, müssen Sie sich darüber keine Gedanken machen.


Unterprojekte

Unterprojekte sind nur die Plattformen, auf denen bereitgestellt werden soll. Dieser Teil ist ziemlich selbsterklärend. Wenn Sie es beispielsweise nicht in HTML implementieren möchten, deaktivieren Sie einfach das Kontrollkästchen.


Erweiterungen

Erweiterungen sind die offiziellen LibGDX-Erweiterungen. Hier ist eine Tabelle, die Ihnen sagt, was jeder ist:

Erweiterungsname Beschreibung
Kugel Bullet ist eine 3D-Kollisionserkennungs- und Rigid Body Dynamics-Bibliothek.
Freetyp Mit Freetype können Sie .ttf-Schriften verwenden, anstatt Bitmap-Schriften verwenden zu müssen
Werkzeuge Ermöglicht die Implementierung der Ausgabe von LibGDX-Tools.
Controller Ermöglicht die Implementierung von Controllern wie XBox 360-Controllern.
Box2d Eine Physikbibliothek für 2D-Spiele.
Box2dlights Ermöglicht eine einfache Möglichkeit, einem Physikspiel weiche dynamische Lichter hinzuzufügen.
Ashley Ein kleines Entity-Framework
Ai Ein Rahmen für künstliche Intelligenz.

Sie können Erweiterungen von Drittanbietern hinzufügen, deren Details oder Namen werden hier jedoch nicht angezeigt.


Erweitert

Im Abschnitt "Erweitert" können Sie verschiedene Einstellungen vornehmen und zusätzliche Projektdateien für Eclipse und IDEA IDE generieren.

Name der Einstellung Beschreibung
Maven Mirror URL Ersetzt Maven Central durch die angegebene Maven-URL
IDEE Erzeugt Intellij IDEA-Projektdateien
Finsternis Erzeugt Eclipse-Projektdateien
Offline-Modus Erzwinge keine Download-Abhängigkeiten

Generation

Wenn Sie alle Ihre Einstellungen richtig vorgenommen haben, können Sie die Schaltfläche "Generieren" drücken. Dies kann einige Sekunden dauern, aber es werden die grundlegenden Dateien und Gradle generiert, die für Ihr Projekt benötigt werden. Wenn Sie damit fertig sind, können Sie das Projekt in Ihre IDE importieren.

LibGDX Allgemeiner Überblick

LibGDX ist eine kostenlose, in Java entwickelte Open-Source-Bibliothek zur Entwicklung von Spielen. Ziel ist es, Benutzern zu ermöglichen, plattformübergreifende Spiele zu entwickeln, die auf Desktop-, Android-, iOS- und Webbrowsern laufen. Schreiben Sie einmal Code, stellen Sie ihn auf einer der wichtigsten Plattformen bereit.

LibGDX Hallo Welt

Grundlagen

Die generierten Projekte enthalten eine grundlegende, bereits implementierte Hello World-ähnliche Anwendung.

Das Hauptprojekt ist das Kernprojekt, das den gesamten plattformunabhängigen Code enthält. Dies ist obligatorisch, aber basierend auf Ihren Generierungseinstellungen können Sie für jede ausgewählte Plattform mehrere Projekte einrichten.

Das Beispiel

Öffnen Sie com.mygdx.game.MyGdxGame.java im core . Sie sehen den folgenden Code:

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    
    @Override
    public void dispose () {
        batch.dispose();
        img.dispose();
    }
} 
 

Obwohl dies Ihr Hauptprojekt ist, werden Sie es nicht direkt ausführen. Sie müssen immer das plattformspezifische Launcher ausführen. Für Desktop heißt es com.mygdx.game.desktop.DesktopLauncher.java im desktop Projekt.

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new MyGdxGame(), config);
    }
} 
 

In dieser Klasse können Sie plattformspezifische Einstellungen festlegen.


Laufen Sie Ihr Spiel

Eclipse und Intellij verwenden zwei verschiedene Methoden, um Ihr Projekt auszuführen. Die IDE finden Sie unten.

Laufen mit Eclipse

Mit eclipse können Sie Ihre Anwendung ausführen, indem Sie diese Klasse als Java-Anwendung ausführen (Rechtsklick auf Projekt -> Ausführen als -> Java-Anwendung). Sie sehen folgendes Fenster:

Hallo Welt auf dem Desktop ausführen

Laufen mit Intellij Idea

In Intellij müssen Sie eine Laufkonfiguration vornehmen. Dazu musst du oben rechts auf die Schaltfläche klicken, die wie eine nach unten gerichtete Karotte aussieht:

Karotte

Klicken Sie dann auf die Schaltfläche "Konfigurationen bearbeiten ...". Es wird ein Bildschirm mit allen aktuellen Laufkonfigurationen angezeigt. Klicken Sie oben links in diesem Fenster auf das "+" und wählen Sie die Option "Anwendung". Wählen Sie von dort aus die Datei "DesktopLauncher" für die Option "Hauptklasse" aus, setzen Sie als Hauptoption "Klassenpfad des Moduls verwenden" und "Arbeitsverzeichnis" den Ordner "Assets" in Ihrem Kernordner. Das Endprodukt sollte ungefähr so ​​aussehen:

Konfigurationsbeispiel ausführen

Sobald Sie dies getan haben, können Sie einen Namen für Ihre Laufkonfiguration auswählen und auf "Übernehmen" und dann auf "OK" klicken. Sobald Sie damit fertig sind, können Sie oben rechts auf das grüne Run-Symbol klicken:

Symbol ausführen

Was passiert in der MyGdxGame-Klasse?

Zuerst wird die create aufgerufen, die den Stapel, der auf dem Bildschirm angezeigt wird, initialisiert. Dann lädt die Methode die badlogic.jpg in den Speicher.

Danach wird die render wiederholt aufgerufen, bis die Anwendung gestoppt wird. Diese Methode setzt die Hintergrundfarbe auf Rot zurück und zeichnet das Bild auf dem Bildschirm. Wie Sie sehen können, müssen Sie die Stapelzeichnung immer beginnen und beenden. Wenn die Anwendung kurz vor dem Stopp steht, wird die dispose Methode aufgerufen, die den von der Textur und dem Stapel belegten Speicherplatz freigibt.

(Es ist gut zu wissen, dass die Entsorgung auch zur Laufzeit auf anderen Plattformen, z. B. Android, erfolgen kann, da Android möglicherweise Speicherplatz freigibt, wenn Anwendungen im Hintergrund ausgeführt werden. Dies ist jedoch ein fortgeschritteneres Thema.)



Anmerkung: Wenn Sie beim Ausführen wie unten beschrieben einen Fehler erhalten, überprüfen Sie diese Frage zur Antwort!

Datei nicht gefunden: badlogic.jpg (intern)

Das 2D-Szenendiagramm

Wenn Sie mit Java oder Android beginnen, erfahren Sie schnell, dass (0,0) in der oberen linken Ecke angezeigt wird. In LibGDX steht jedoch (0,0) standardmäßig in der unteren linken Ecke.

Mit einer orthographischen Kamera können Sie (0, 0) in der oberen linken Ecke anzeigen. Standardmäßig befindet sich (0, 0) in der unteren linken Ecke. Dies ist etwas, das zu wissen wichtig ist, da es auch ändert, welche Ecke der Texturen die X- und Y-Koordinaten hat.