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