Libgdx Hintergrund und Vordergrund in einem Schritt

Meine Anforderungen:

Hintergrund füllt den gesamten physischen Bildschirm aus (bei Bedarf strecken)Seitenverhältnis von Vordergrundobjekten beibehalten (Mit virtueller Breite und Höhe arbeiten)

Dafür verwende ich zwei Stufen auf meinem Bildschirm, wie im folgenden Code gezeigt.

public void render(float delta) {
    backgroundStage.act(delta);
    backgroundStage.draw();
    foregroundStage.act(delta);
    foregroundStage.draw();
    }

public void resize(int width, int height) {
    background.setWidth(width);
    background.setHeight(height);
    backgroundStage.setViewport(width, height, true);
    foregroundStage.setViewport(MainGame.WIDTH, MainGame.HEIGHT, true);
    foregroundStage.getCamera().position.set(-foregroundStage.getGutterWidth(),-foregroundStage.getGutterHeight(),0);
    }

In allen Tutorials, die ich gelesen habe, wurde nur eine Stufe für jeden Bildschirm verwendet. Wie erfülle ich also beide Anforderungen einstufig? Ist es zu teuer, getrennte Stufen zu haben? (Ich habe gelesen, dass SpriteBatch-Objekte schwer sind!)

So habe ich das Problem gelöst:

Um das Hintergrundstadium loszuwerden, habe ich meine Render- und Größenänderungsfunktionen wie folgt aktualisiert. Grundsätzlich habe ich die rechte untere Ecke des Hintergrunds auf (-gutterWidth, -gutterHeight) verschoben und die doppelten Werte für die Breite und Höhe der Dachrinne zur Breite und Höhe der Region der Texturregion hinzugefügt. Die Bühne ist jetzt weg :-)

public void render(float delta) {
    Gdx.gl.glClearColor(0, 1, 0, 0.5f);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    foregroundStage.getSpriteBatch().begin();
    foregroundStage.getSpriteBatch().draw(backgroundImage,-gw,-gh,backgroundImage.getRegionWidth()+2*gw,backgroundImage.getRegionHeight()+2*gh);
    foregroundStage.getSpriteBatch().end();
    foregroundStage.act(delta);
    foregroundStage.draw();


public void resize(int width, int height) {
    screenW = width;
    screenH = height;
    foregroundStage.setViewport(MainGame.WIDTH, MainGame.HEIGHT, true);
    gw = foregroundStage.getGutterWidth();
    gh = foregroundStage.getGutterHeight();
    foregroundStage.getCamera().translate(-gw,-gh,0);
    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage