libgdx
Ondersteunt meerdere resoluties
Zoeken…
viewports
Om meerdere resoluties en beeldverhoudingen te ondersteunen, gebruikt Libgdx de zogenaamde Viewports
.
Er zijn een paar soorten Viewports
die verschillende strategieën gebruiken om meerdere resoluties en beeldverhoudingen aan te kunnen.
Een Viewport
maakt gebruik van een Camera
onder de motorkap en beheert zijn viewportHeight
en viewportWidth
. U kunt de Viewport
optioneel een Camera
in de constructor geven, anders gebruikt hij standaard een OrthographicCamera
:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
Bovendien moet u de worldWidth
en worldHeight
opgeven voor de worldHeight
van de viewport. Deze ruimte vertegenwoordigt het virtuele coördinatensysteem dat u zult gebruiken voor het opgeven van de te tekenen objecten en afmetingen. De viewport-transformatie, die bijvoorbeeld op een SpriteBatch kan worden toegepast, zorgt automatisch voor de transformatie van de logische coördinaten naar werkelijke schermcoördinaten, op een manier die overeenkomt met het daadwerkelijke type viewport dat u gebruikt. Als u bijvoorbeeld een orthografische projectie gebruikt (de standaard OrthographicCamera
): als uw wereldformaat 12,8 bij 7,8 meter is en uw apparaatscherm 2560x1560 pixels is, wordt uw wereld dynamisch geprojecteerd met 200 pixels per meter.
Wanneer de grootte van de Viewport
verandert (bijvoorbeeld als de schermstand van de smartphone verandert), moet u de Viewport
over die wijziging informeren. dan wordt de viewportHeight
de Camera
automatisch bijgewerkt viewportHeight
en viewportWidth
:
public void resize(int width, int height) {
viewport.update(width, height);
}
De Viewport
s beheren ook de OpenGL Viewport
en wijzigen het tekengebied naar behoefte.
De Viewport
s zorgen ook voor het omzetten van schermcoördinaten naar spelcoördinaten, wat vooral nodig is voor het kiezen:
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);
}
Ingebouwde Viewports
Er zijn een paar ingebouwde viewports, die elk verschillende dingen doen. Hier is een lijst met de namen en hun beschrijvingen:
Viewport naam | Beschrijving |
---|---|
StretchViewport | Zal het scherm uitrekken. Geen zwarte balken, maar de beeldverhouding is mogelijk uitgeschakeld. |
FitViewport | Zal de grootte maximaliseren op basis van de beeldverhouding. Kan zwarte balken hebben. |
FillViewport | Helemaal hetzelfde als een FitVieport, maar vult altijd het hele scherm. |
ScreenViewport | Vult altijd het hele scherm, maar verkleint geen kinderen. |
ExtendedViewport | Houdt de beeldverhouding van de wereld zonder zwarte balken door de wereld in één richting uit te breiden |
CustomViewport | Een op maat geprogrammeerde Viewport. Heeft mogelijk zwarte balken en kan de beeldverhouding behouden. |
Aangepaste Viewports
U kunt uw eigen aangepaste viewport maken. Het kan zwarte balken hebben en het kan de beeldverhouding al dan niet behouden, afhankelijk van hoe u het programmeert. Een aangepast kijkvenster ziet er ongeveer zo uit:
public class Tutorial extends Viewport
. U zou de update(width, height)
moeten overschrijven, maar dat is het dan.
Een andere poging zou zijn om de generieke ScalingViewport
te breiden en een andere Scaling te leveren die nog niet is meegeleverd. Stel dat u het Scaling.none
op Scaling.none
. Dat zou er ongeveer zo uitzien: Als je wat referentie wilt, kun je de ingebouwde viewport-klassen hier vinden .
StretchViewport
De StretchViewport
is een Viewport
type dat een virtuele schermgrootte ondersteunt.
Hiermee kunt u een vaste (resolutie-onafhankelijke) breedte en hoogte definiëren.
De StretchViewport
, zoals de naam al doet vermoeden, het virtuele scherm uit als de virtuele beeldverhouding niet overeenkomt met de werkelijke beeldverhouding. De OpenGL Viewport wordt niet gewijzigd en er verschijnen geen zwarte balken.
Gebruik:
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 zijn viewports die altijd de beeldverhouding behouden. Dit gebeurt door zwarte balken aan de randen te maken waar ruimte over is. Dit is een van de meest gebruikte viewports.
Gebruik:
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);
}