2013-03-04 13 views
12

Sto lavorando a un gioco che necessita di una GUI sopra la schermata di gioco. Qualcosa come FrameLayout in Android.GUI su schermo di Libgdx (per il tasto di pausa)

Ho GameScreen in cui tutto sta accadendo. Quello che voglio ora è aggiungere un pulsante "pausa", informazioni di alto valore ecc.

Ho provato a combinare un oggetto Stage con un normale disegno di sprite. Ma ho avuto qualche problema con la gestione degli input: come gestire se l'utente ha fatto clic sul pulsante di pausa nello stage o ha fatto clic sull'area di gioco (dove dovrei aggiungere alcuni punti) ...

Qualcuno può chiarirlo?

risposta

23

Dovresti essere in grado di utilizzare un Stage per gestire l'interfaccia utente. Per ottenere il corretto funzionamento dell'input, è necessario aggiungere uno InputMultiplexer in modo che lo schema di input corrente sia in input sia per lo schema di immissione corrente Stage.

Per configurarlo, farete qualcosa di simile:

InputMultiplexer multiplexer = new InputMultiplexer(); 
multiplexer.addProcessor(stage); 
multiplexer.addProcessor(gameScreenInputProcessor); 
Gdx.input.setInputProcessor(multiplexer); 

(Esempio di codice basato sul codice da https://code.google.com/p/libgdx/wiki/InputEvent)

Si noti che l'ordine è importante (Sto indovinando' Voglio che il palcoscenico prenda prima gli eventi per vedere se l'interfaccia utente viene toccata o meno). Inoltre, il valore di ritorno booleano dai gestori di eventi di input è più importante con un multiplexer, poiché gli eventi "gestiti" non verranno propagati dal mutlifivo. Gli eventi dell'interfaccia all'interno dello Stage hanno il loro flag "gestito" (per lo più fa la cosa giusta ma ci sono alcune sottili differenze).

Un'alternativa alla InputMultiplexer sarebbe quello di creare un "GameScreenActor" (una nuova sottoclasse di Actor) che contiene lo schermo partita in corso che si collega al globale Stage. Dovresti spostare la tua elaborazione di input sull'approccio scena2d, però. Questa probabilmente non è la scelta giusta per te, ma è valida.

+0

Ok, pensavo di sì ... Ho controllato la documentazione di InputMultiplexer ... la tua risposta ha senso. Proverò questo approccio ... speriamo che funzioni. Molto bene! :) Ho familiarità con la gestione degli input in Android, spero che funzioni in modo simile :) – Veljko