2017-11-09 4 views
0

Ich bin neu in LibGDX, also versuche ich immer noch, das Wesentliche daraus zu machen. Ich habe eine isometrische Karte auf den Bildschirm gerendert und nach fast 2 Tagen habe ich es geschafft, sie auf dem Bildschirm zu zentrieren. Es bleibt jedoch die gleiche Größe, egal wie groß der Bildschirm ist. hier ist, was ich meine:LibGDX - Skalierung der isometrischen gekachelten Karte auf Bildschirmgröße. Größerer Bildschirm größere Karte

800x600

1920x1080

Was ich es tun wollen, um die Karte zu skalieren, je nachdem, wie groß der Bildschirm ist. Hier ist der Code:

public class PlayScreen implements Screen { 

    private TiledMap map; 
    private IsometricTiledMapRenderer isometricRenderer; 
    private OrthographicCamera camera; 

    public void createUI() { 
     // Load map from tiled .tmx file. 
     map = new TmxMapLoader().load("arena1/arena1.tmx"); 

     // Setup isometric renderer and camera. 
     isometricRenderer = new IsometricTiledMapRenderer(map); 
     camera = new OrthographicCamera(); 
    } 

    @Override 
    public void show() { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     createUI(); 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     isometricRenderer.setView(camera); 
     isometricRenderer.render(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     camera.viewportWidth = width * 2; 
     camera.viewportHeight = height * 2; 
     camera.position.set(768, 0, 0); 
     camera.update(); 
    } 

    @Override 
    public void pause() {} 

    @Override 
    public void resume() {} 

    @Override 
    public void hide() {} 

    @Override 
    public void dispose() { 
     map.dispose(); 
     isometricRenderer.dispose(); 
    } 
} 

Vielen Dank im Voraus!

Antwort

0

Um mit verschiedenen Bildschirmgrößen zu arbeiten, hat libGDX Viewports. Sie behalten Verhältnis aller Zeichnung auf einem Bildschirm die gleiche auf verschiedenen Bildschirmen.

Zum Beispiel FitViewport wird immer das Seitenverhältnis der virtuellen Bildschirmgröße beibehalten, während es so viel wie möglich skaliert wird, um den Bildschirm anzupassen.

public class PlayScreen implements Screen { 

    private TiledMap map; 
    private IsometricTiledMapRenderer isometricRenderer; 
    private FitViewport viewport; 

    public void createUI() { 
     // Load map from tiled .tmx file. 
     map = new TmxMapLoader().load("arena1/arena1.tmx"); 

     // Setup isometric renderer and camera. 
     isometricRenderer = new IsometricTiledMapRenderer(map); 

     int width = 800; // Can change to other 
     int height = 480; 
     viewport = new FitViewport(width, height, new OrthographicCamera(width, height)); 

     viewport.camera.position.set(768, 0, 0); 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     isometricRenderer.setView(viewport.camera); 
     isometricRenderer.render(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height); 
    } 
    ... 
} 
+0

musste es OrthographicCamera wie diese gießen: isometricRenderer.setView ((OrthographicCamera) fitViewport.getCamera()); und es funktionierte perfekt, danke! –

Verwandte Themen