libgdx
Supporto di più risoluzioni
Ricerca…
finestre
Per supportare più risoluzioni e proporzioni, Libgdx utilizza le cosiddette Viewports
.
Esistono alcuni tipi di Viewports
che utilizzano strategie diverse per gestire più risoluzioni e proporzioni.
Un Viewport
utilizza una Camera
sotto il cofano e ne gestisce viewportHeight
e viewportWidth
. Opzionalmente è possibile assegnare a Viewport
una Camera
nel suo costruttore, altrimenti verrà utilizzata una OrthographicCamera
per impostazione predefinita:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
Inoltre, è necessario specificare worldWidth
e worldHeight
nel worldHeight
della viewport. Questo spazio rappresenterà il sistema di coordinate virtuale che userai per specificare la posizione degli oggetti da disegnare e le dimensioni. La trasformazione della viewport, che può essere applicata ad una SpriteBatch, ad esempio, si prenderà automaticamente cura di trasformare le coordinate logiche in coordinate dello schermo reali, con un modo conforme al tipo effettivo di viewport che si sta utilizzando. Ad esempio, quando si utilizza una proiezione ortografica ( OrthographicCamera
, che è l'impostazione predefinita): se la dimensione del mondo è 12,8 per 7,8 metri e lo schermo del dispositivo è 2560x1560 pixel, il mondo verrà proiettato dinamicamente con 200 pixel al metro.
Quando cambia la dimensione di Viewport
(ad esempio se l'Orientamento dello schermo dello Smartphone sta cambiando), è necessario informare il Viewport
di tale modifica. aggiornerà automaticamente la viewportHeight
e viewportWidth
della Camera
:
public void resize(int width, int height) {
viewport.update(width, height);
}
I Viewport
gestiscono anche OpenGL Viewport
e modificano l'area disegnabile secondo necessità.
I Viewport
si occupano anche della conversione delle coordinate dello schermo in coordinate di gioco, necessarie soprattutto per il prelievo:
private Vector2 worldPos = new Vector2();
public boolean touchDown (int x, int y, int pointer, int button) {
worldPos.set(x, y);
viewport.unproject(worldPos);
processPicking(worldPos);
}
Viewport integrati
Ci sono un paio di finestre integrate, ognuna delle quali fa cose diverse. Ecco un elenco dei nomi e delle loro descrizioni:
Nome della vista | Descrizione |
---|---|
StretchViewport | Allungerà lo schermo. Nessuna barra nera, ma le proporzioni potrebbero essere disattivate. |
FitViewport | Ottimizzerà la sua dimensione in base al rapporto d'aspetto. Potrebbe avere barre nere. |
FillViewport | Piuttosto uguale a FitVieport, ma riempie sempre l'intero schermo. |
ScreenViewport | Riempie sempre l'intero schermo, ma non ridimensiona i bambini. |
ExtendedViewport | Mantiene le proporzioni del mondo senza barre nere estendendo il mondo in una direzione |
CustomViewport | Una vista personalizzata programmata. Potrebbe avere barre nere e potrebbe mantenere le proporzioni. |
Viste personalizzate
Puoi creare il tuo viewport personalizzato. Potrebbe avere barre nere e potrebbe o meno mantenere le proporzioni, a seconda di come lo si programma. Una vista personalizzata sarebbe simile a questa:
public class Tutorial extends Viewport
. Avresti bisogno di sovrascrivere l' update(width, height)
, ma il gioco è fatto.
Un altro tentativo potrebbe essere quello di estendere il generico ScalingViewport
e fornire un altro ridimensionamento che non è già fornito. Supponi di averlo impostato su Scaling.none
. Sarebbe simile a questo: Se vuoi qualche riferimento, puoi trovare le classi di viewport incorporate qui .
StretchViewport
StretchViewport
è un tipo di Viewport
, che supporta una dimensione dello schermo virtuale.
Questo ti permette di definire una larghezza e altezza fissa (indipendente dalla risoluzione).
StretchViewport
, come suggerisce il nome, allunga lo schermo virtuale, se le proporzioni virtuali non corrispondono alle proporzioni reali. OpenGL Viewport non verrà modificato e non appariranno barre nere.
Uso:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new OrthographicCamera();
viewport = new StretchViewport(80, 48, camera);
}
public void resize(int width, int height) {
viewport.update(width, height);
}
FitViewport
FitViewports sono viewport che mantengono sempre le proporzioni. Lo fa creando barre nere sui bordi dove rimane spazio. Questa è una delle finestre più comunemente usate.
Uso:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new OrthographicCamera();
viewport = new FitViewport(80, 48, camera);
}
public void resize(int width, int height) {
viewport.update(width, height);
}