Ricerca…


Versioni

Versione Data di rilascio
1.9.3 2016/05/16
1.9.5 2016/12/11

Installazione o configurazione

LibGDX ha una configurazione abbastanza semplice, con l'aiuto di un semplice programma Java. Puoi trovare il download qui . Quando avvii l'applicazione, sarà simile a questa: Esempio di generatore di progetti LibGDX
Nota: questo screenshot è stato realizzato su Linux e mostra il percorso che differisce da un'installazione di Windows. Tuttavia, il modulo è lo stesso su qualsiasi sistema operativo compatibile con questa applicazione di configurazione

Caselle di input

Nella casella di inserimento "Nome", è il nome del gioco per il tuo progetto. La casella di inserimento "Pacchetto" è il pacchetto della tua classe principale. La casella di input "Game Class" è la classe principale che viene chiamata quando si esegue il gioco. La casella di input "Destinazione" è la destinazione in cui verrà generato il progetto. La casella di input "Andriod SDK", il percorso dove si trova il tuo sdk Android. Questa casella di input è completamente opzionale, quindi se non vuoi distribuire la tua applicazione su Android, non devi preoccuparti di questo.


Sottoprogetti

I progetti secondari sono solo le piattaforme a cui devono essere distribuiti. Quella parte è piuttosto auto-esplicativa. Se non vuoi distribuirlo in HTML, per esempio, semplicemente deseleziona la casella di controllo.


estensioni

Le estensioni sono le estensioni libgDX ufficiali. Ecco una tabella che ti dice che ognuno è:

Nome dell'estensione Descrizione
proiettile Bullet è una libreria per la rilevazione di collisioni 3D e la dinamica dei corpi rigidi.
Freetype Freetype ti permette di usare i caratteri .ttf, invece di dover usare i font Bitmap
Utensili Consente di implementare l'output degli strumenti LibGDX.
Controller Ti permette di implementare controller come i controller XBox 360.
box2d Una libreria di fisica per giochi 2D.
Box2dlights Consente un modo semplice di aggiungere luci dinamiche morbide a un gioco di fisica.
Ashley Un piccolo quadro di entità
Ai Una struttura di intelligenza artificiale.

Puoi aggiungere estensioni di terze parti, ma i loro dettagli o nomi non verranno mostrati qui.


Avanzate

Nella sezione Avanzate è possibile impostare diverse impostazioni e generare file di progetto aggiuntivi per Eclipse e IDE IDE.

Impostazione del nome Descrizione
Maven Mirror URL Sostituisce Maven Central con l'URL Maven fornito
IDEA Genera file di progetto IDEA Intellij
Eclisse Genera file di progetto Eclipse
Modalità offline Non forzare le dipendenze di download

Generazione

Una volta che tutte le impostazioni sono corrette, puoi premere il pulsante "Genera". Questo potrebbe richiedere un paio di secondi, ma genererà i file di base e Gradle necessario per il tuo progetto. Una volta terminato, è necessario importare il progetto nel tuo IDE.

LibGDX Hello World

Nozioni di base

I progetti generati contengono un'applicazione di base Hello World già implementata.

Il progetto principale è il progetto principale, che contiene tutto il codice indipendente dalla piattaforma. Questo è obbligatorio, ma in base alle impostazioni della tua generazione puoi avere molti più progetti per ogni piattaforma che hai selezionato.

L'esempio

Apri com.mygdx.game.MyGdxGame.java nel progetto core . Vedrai il seguente codice:

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();
    }
} 

Sebbene questo sia il tuo progetto principale, non lo eseguirai direttamente, devi sempre eseguire il Launcher specifico per piattaforma, per desktop si chiama com.mygdx.game.desktop.DesktopLauncher.java nel progetto desktop .

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

In questa classe puoi impostare le impostazioni specifiche della piattaforma.


Gestisci il tuo gioco

Eclipse e Intellij usano due metodi diversi per eseguire il tuo progetto. Trova l'IDE che usi qui sotto.

Esecuzione con Eclipse

Utilizzando eclipse, è possibile eseguire l'applicazione eseguendo questa classe come applicazione Java (fare clic con il tasto destro del mouse su progetto -> Esegui come -> Applicazione Java). Vedrai la seguente finestra:

Esecuzione di Hello World sul desktop

Funzionando usando l'idea di Intellij

In Intellij, dovrai eseguire una configurazione di corsa. Per fare ciò, è necessario fare clic sul pulsante in alto a destra che assomiglia a una carota verso il basso:

Carota

Quindi fare clic sul pulsante "Modifica configurazioni ...". Ti verrà presentata una schermata di tutte le configurazioni correnti della corsa. Fai clic su "+" in alto a sinistra in quella finestra e seleziona l'opzione "Applicazione". Da lì, selezionare il file "DesktopLauncher" per l'opzione "Main class", impostare "Usa classpath del modulo" sull'opzione core e impostare "Directory di lavoro" nella cartella delle risorse nella cartella principale. Il prodotto finale dovrebbe assomigliare a questo:

Esegui un esempio di configurazione

Dopo averlo fatto, è possibile selezionare un nome per la configurazione di esecuzione e fare clic su "Applica", quindi su "OK". Una volta terminato, puoi fare clic sull'icona a scorrimento verde in alto a destra:

Esegui l'icona

Cosa sta succedendo nella classe MyGdxGame?

Prima viene chiamato il metodo di create , che inizializzerà il batch che disegna sullo schermo. Quindi il metodo carica il file badlogic.jpg nella memoria.

Dopo questo il metodo di render viene chiamato più volte fino a quando l'applicazione non viene arrestata. Questo metodo si reimposta sul colore di sfondo su rosso e disegna l'immagine sullo schermo. Come puoi vedere, devi sempre iniziare e finire il disegno in batch. Infine, quando l'applicazione sta per interrompere il metodo di dispose , ciò libererà lo spazio di memoria utilizzato dalla trama e dal batch.

(È bene sapere che lo smaltimento può avvenire anche in runtime su altre piattaforme, ad esempio Android, perché Android potrebbe liberare spazio di memoria quando le applicazioni sono in background, ma questo è un argomento più avanzato)



Nota: se si verifica un errore durante l'esecuzione come di seguito, controllare la risposta per questa domanda !

File non trovato: badlogic.jpg (interno)

Panoramica generale di LibGDX

LibGDX è una libreria di sviluppo di giochi open source gratuita sviluppata in Java. Gli obiettivi sono permettere agli utenti di sviluppare giochi multipiattaforma che girano su desktop, Android, iOS e browser web. Scrivi il codice una volta, distribuilo su una delle piattaforme principali.

Aggiunta del supporto per il codice specifico della piattaforma

LibGDX è progettato in modo da poter scrivere lo stesso codice e distribuirlo su diverse piattaforme. Tuttavia, ci sono momenti in cui si desidera ottenere l'accesso al codice specifico della piattaforma. Per un'istanza, se hai classifiche e risultati nel tuo gioco, potresti voler utilizzare strumenti specifici della piattaforma (come Google Play Games) oltre a memorizzarli localmente. O vuoi usare un database, o qualcosa di completamente diverso.

Non è possibile aggiungere questo tipo di codice nel modulo principale. Quindi il primo passo è creare un'interfaccia. Crealo nel modulo principale. Questa prima è un'utilità per gestire altre interfacce:

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
}

Quindi, dobbiamo creare una seconda interfaccia, SQLWrapper. Questo va anche nel modulo principale.

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
}

Ora, è necessario entrare in ogni progetto e creare una classe per implementare PlatformWrapper e una per implementare SQLWrapper. In ogni progetto si aggiunge il codice necessario, come le istanze, i costruttori e così via.

Dopo aver sovrascritto tutte le interfacce che hai creato, assicurati che abbiano tutte un'istanza nella classe che implementa PlatformWrapper (e che c'è un getter). Alla fine, cambi il costruttore nella classe principale. La classe principale è la classe di riferimento dal programma di avvio. Estende ApplicationAdapter, implementa ApplicationListener o estende Game. Modifica il costruttore e aggiungi PlatformWrapper come argomento. All'interno del wrapper della piattaforma hai alcune utility (se ne hai aggiunte) oltre a tutti gli altri wrapper (sql, achievement, o qualsiasi altra cosa aggiunta).

Ora, se tutto è impostato correttamente, è possibile effettuare una chiamata a PlatformWrapper e ottenere una qualsiasi delle interfacce multipiattaforma. Chiama qualsiasi metodo e (assumendo che il codice eseguito sia corretto) vedrai su qualsiasi piattaforma, fa quello che dovrebbe fare con il codice specifico della piattaforma

AssetManager

AssetManager è una classe che ti aiuta a gestire le tue risorse.

Innanzitutto, devi creare un'istanza:

AssetManager am = new AssetManager();

Dopo che questo è stato inizializzato, e prima di eseguire il rendering di qualsiasi cosa, vuoi ottenere le risorse:

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();

Ora, dove hai voglia di ricevere badlogic.jpg :

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

Usando AssetManager puoi caricarli una volta nella memoria di AssetManager, e quindi ottenerli tutte le volte che vuoi.

Perché usare AssetManager? (dal wiki ):

AssetManager (codice) ti aiuta a caricare e gestire le tue risorse. È il modo consigliato per caricare le tue risorse, a causa dei seguenti comportamenti:

  • Il caricamento della maggior parte delle risorse viene eseguito in modo asincrono, pertanto è possibile visualizzare una schermata di caricamento reattiva mentre le cose si caricano
  • Le risorse sono conteggiate con riferimento. Se due beni A e B dipendono entrambi da un'altra risorsa C, C non sarà smaltita finché A e B non saranno stati eliminati. Ciò significa anche che se carichi una risorsa più volte, sarà effettivamente condivisa e occuperà solo una volta la memoria!
  • Un unico luogo in cui archiviare tutte le tue risorse.
  • Permette di implementare in modo trasparente cose come cache (vedi FileHandleResolver sotto)

Il grafico della scena 2D

Quando inizi con Java o Android, impari rapidamente che (0,0) si trova nell'angolo in alto a sinistra. In LibGDX, tuttavia, (0,0) è di default nell'angolo in basso a sinistra.

Usando una camera ortogonale, puoi ottenere (0, 0) nell'angolo in alto a sinistra. Anche se di default, (0, 0) si trova nell'angolo in basso a sinistra. Questo è qualcosa che è importante sapere, poiché cambia anche quale angolo delle trame ha le coordinate X e Y.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow