2014-05-13 13 views
5

Grazie all'aiuto ottenuto con gli altri miei problemi su questo forum, sono riuscito a far avanzare il mio progetto, ma un altro ostacolo appare sulla mia strada.Libgdx schermi multipli

Sto riscontrando problemi nell'implementazione di più schermate in libgdx per java. Mi piacerebbe sapere come posso implementare più schermi (uno per il menu principale, uno per il gioco, uno per il caricamento dello schermo, ...).

Un esempio o alcune spiegazioni su come dovrei strutturare le mie classi dello schermo sarebbe davvero utile. Ho provato a implementare il mio screen manager ma non è andata molto bene ... Inoltre alcuni suggerimenti su come dovrei smaltire gli schermi, poiché creare schermate ogni volta che vai dal menu principale a giocare o al menu delle opzioni non è molto buono idea. Qualsiasi idea o esempio di codice o consiglio è molto apprezzato.

Quello che ho ora sono alcune classi di schermate di gioco che al momento del rendering disegnano una GUI sullo schermo, ma funzioni come il pulsante Indietro non funzionano poiché non so come creare il collegamento tra loro.

+1

mi raccomando a voi per leggere lo steigert blog dal momento che spiega tutto. http://steigert.blogspot.de/. Non sarà completamente aggiornato, ma ti mostrerà alcune cose utili come un'astrazione per lo schermo e così via. – BennX

risposta

7

Supponiamo di avere 3 schermate, MainMenuScreen, OptionsScreen, GameScreen.

Per prima cosa è necessario dichiararli nella classe principale.

Si sarà simile a questa

public class MainClass extends Game implements ApplicationListener { 

    private GameScreen gameScreen; 
    private MenuScreen menuScreen; 
    private OptionsScreen optionsScreen; 

    @Override 
    public void create() { 



    } 
    setGameScreen() 
    { 
     gameScreen=new GameScreen(this); 
     setScreen(gameScreen); 
    } 
    setMenuScreen() 
    { 
     menuScreen=new menuScreen(this); 
     setScreen(menuScreen); 
    } 
    setOptionsScreen() 
    { 
     optionsScreen=new OptionsScreen(this); 
     setScreen(gameScreen); 
    } 



    @Override 
    public void dispose() { 

     super.dispose(); 
    } 

    @Override 
    public void render() { 

     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

     super.render(); 
    } 

    @Override 
    public void resize(int width, int height) { 

     super.resize(width, height); 
    } 

    @Override 
    public void pause() { 
     super.pause(); 
    } 

    @Override 
    public void resume() { 
     super.resume(); 
    } 
} 

Ora, ogni schermo che hai, ha bisogno di avere una variabile MainClass e un costruttore di esso.

Diciamo che per la classe GameScreen, sarà come

public class GameScreen implements Screen{ 

    private MainClass mainClass; 

    public GameScreen(MainClass mc) 
    { 
     mainClass=mc; 
    } 
    // your methods (show,render, pause, etc) 
} 

Ora, quando si desidera cambiare la schermata basta usare nella vostra schermata

mainClass.setMenuScreen(); 
+0

** IMHO ** In realtà non è necessario dichiararli all'interno della classe principale e non mi sento di raccomandare di mantenere un riferimento a tutti loro poiché non è necessario. Quando si cambia lo schermo, è sufficiente crearne uno nuovo se necessario. Ho solo un riferimento al GameScreen poiché è un po 'più grande e richiede più tempo per caricare, ma tutto il resto è solo spazzatura in memoria. – BennX

+0

Ottimo approccio, mi piace che la mainClass gestisca un articolo così importante. Avrò circa 5-7 schermi e schermi di commutazione con un mainClass.screen Qualunque sia pulito. Cordiali saluti, la classe Game implementa già l'interfaccia ApplicationListener. –