libgdx
Soutenir plusieurs résolutions
Recherche…
Fenêtres
Pour prendre en charge plusieurs résolutions et formats d'image, Libgdx utilise les " Viewports
.
Il existe quelques types de Viewports
qui utilisent différentes stratégies pour gérer plusieurs résolutions et rapports d'aspect.
Un Viewport
utilise un Camera
sous le capot et gère viewportHeight
et viewportWidth
. Vous pouvez éventuellement donner à la Viewport
une Camera
dans son constructeur, sinon elle utilisera une OrthographicCamera
par défaut:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
De plus, vous devez spécifier worldWidth
et worldHeight
au worldHeight
de la fenêtre. Cet espace représentera le système de coordonnées virtuel que vous utiliserez pour spécifier la position des objets à dessiner et leurs tailles. La transformation de fenêtre d'affichage, qui peut être appliquée à un SpriteBatch, par exemple, se chargera automatiquement de transformer les coordonnées logiques en coordonnées d'écran réelles, d'une manière conforme au type de fenêtre que vous utilisez. Par exemple, lorsque vous utilisez une projection orthographique ( OrthographicCamera
, qui est la valeur par défaut): si la taille de votre monde est de 12,8 x 7,8 mètres et que l'écran de votre appareil mesure 2560 x 1560 pixels, votre monde sera projeté de manière dynamique avec 200 pixels par mètre.
Lorsque la taille de la Viewport
change (par exemple, si l'orientation de l'écran du smartphone est en train de changer), vous devez informer la Viewport
de ce changement. Il mettra alors automatiquement à jour le viewportHeight
et le viewportWidth
Camera
:
public void resize(int width, int height) {
viewport.update(width, height);
}
Les Viewport
visualisation gèrent également la fenêtre OpenGL Viewport
et modifient la zone de dessin selon les besoins.
Les Viewport
prennent également soin de convertir les coordonnées de l'écran en coordonnées de jeu, ce qui est nécessaire en particulier pour la cueillette:
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);
}
Fenêtres intégrées
Il y a quelques fenêtres intégrées qui font chacune des choses différentes. Voici une liste des noms et de leurs descriptions:
Nom de la fenêtre | La description |
---|---|
StretchViewport | Va étirer l'écran. Pas de barres noires, mais les proportions peuvent être désactivées. |
FitViewport | Maximisera sa taille en fonction du ratio d'aspect. Pourrait avoir des barres noires. |
FillViewport | Tout comme un FitVieport, mais remplit toujours tout l'écran. |
ScreenViewport | Remplit toujours tout l'écran, mais ne redimensionne aucun enfant. |
ExtendedViewport | Maintient le rapport hauteur / largeur sans barres noires en étendant le monde dans une direction |
CustomViewport | Une fenêtre personnalisée programmée. Pourrait avoir des barres noires, et pourrait garder les proportions. |
Fenêtres personnalisées
Vous pouvez créer votre propre fenêtre personnalisée. Il peut avoir des barres noires et il peut ou non conserver son format, en fonction de la façon dont vous le programmez. Une fenêtre personnalisée ressemblerait à ceci:
public class Tutorial extends Viewport
. Vous devez remplacer la update(width, height)
à update(width, height)
, mais c'est tout.
Une autre tentative consisterait à étendre le ScalingViewport
générique et à fournir un autre Scaling qui n'est pas déjà fourni. Supposons que vous le définissiez sur Scaling.none
. Cela ressemblerait à ceci: Si vous voulez une référence, vous pouvez trouver les classes de fenêtre intégrées ici .
StretchViewport
Le StretchViewport
est une Viewport
d' Viewport
de type, qui prend en charge une taille de l' écran virtuel.
Cela vous permet de définir une largeur et une hauteur fixes (résolution indépendante).
StretchViewport
, comme son nom l'indique, étend l'écran virtuel si le format d'image virtuel ne correspond pas au rapport d'aspect réel. La fenêtre OpenGL ne sera pas modifiée et il n’y aura pas de barres noires.
Usage:
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
Les FitViewports sont des fenêtres qui conservent toujours les proportions. Cela se fait en créant des barres noires sur les bords où il reste de la place. C'est l'une des fenêtres les plus utilisées.
Usage:
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);
}