2017-10-31 4 views
2

Ich habe eine Strecke Ansichtsfenster, das ich jedes Mal aktualisieren, wird der Bildschirm rezised mit:Libgdx Sprite Masstab nicht mit Darstellungs

viewport.update(x, y, true); 

ich einen Hintergrund mit photoshop zog und dann entfernte ich die Objekte und setzen die in einer separaten Datei Also, was ich damit meine ist, dass die Objekte vom Ursprung her die richtige Größe haben, da ich sie vom ursprünglichen Hintergrund getrennt habe und sie texturiert habe.

Was ich finde ist, dass, wenn ich diese Objekte zeichne (mit Sprite) ich die Skalierung jedes Sprites auf 2,25 setzen muss, sonst wären die Sprites kleiner und ich weiß nicht, was ich falsch mache seit ich eine einzige Kamera benutze/viewport, ein einzelner Stapel und Aufruf von batch.setProjectionMatrix (camera.combined).

Was mache ich falsch?

Dies ist, wie ich das Ansichtsfenster und Kamera erstellt:

public static Dimension virtualResolution = VirtualResolution.RES_768x432.resolution; 
public static Dimension screenResolution = new Dimension(1920, 1080); 

camera = new OrthographicCamera(); 
camera.setToOrtho(false, GameSettings.virtualResolution.getWidth(), GameSettings.virtualResolution.getHeight()); 
camera.update(); 

viewport = new StretchViewport(GameSettings.screenResolution.getWidth(), GameSettings.screenResolution.getHeight(), camera); 
viewport.apply(); 

Antwort

2

Sie sind nicht Kameras und Ansichtsfenstern funktioniert nicht richtig.

Kameras haben ihre eigene "Ansichtsbreite" und "Ansichtshöhe", die Sie tatsächlich in der setToOrtho Methode angeben. Allerdings müssen Sie solche Dinge nicht auf eine Kamera einstellen, wenn Sie einen Viewport verwenden.

Stattdessen geben Sie diese Größenparameter zusammen mit einer Orthographic-Kamera an den Viewport-Konstruktor.

gamecam = new OrthographicCamera(); 
gamePort = new StretchViewport(V_WIDTH, V_HEIGHT, gamecam); 
gamePort.apply(); 
gamecam.position.set(new Vector3(100, 100, 0)); 

In Ihrem Spiel werden Sie immer mit der Kamera arbeiten, wenn der Bildschirm der Größe verändert wird.

Wenn der Bildschirm in der Größe geändert wird, wird der Code wie folgt aussehen.

@Override public void resize(int width, int height) { 
    gamePort.update(width, height); // The third boolean parameter 
            // centers the camera 
} 

In Ihrer Frage verwendeten Sie zwei Größen, eine basierend auf der Bildschirmauflösung, die andere eine virtuelle Breite und Höhe. Sie werden nur einen verwenden und dieser wird an den Viewport übergeben.

Dies sollte jetzt Ihre Sprites korrekt skalieren!

Ich hoffe, diese Antwort hat geholfen! Wenn Sie weitere Fragen haben, zögern Sie nicht, unten zu kommentieren!

Verwandte Themen