Libgdx hintergrund und Vordergrund in eine einzige Bühne

Meine Anforderungen:

  1. Hintergrund-Füllung gesamten physischen Bildschirm (dehnen, falls erforderlich)
  2. Seitenverhältnis beibehalten von Vorder-Anlagen (virtuelle Breite und Höhe)

Dafür verwende ich zwei Stufen in mein Bildschirm wie im code gezeigt unten.

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 den ganzen tutorials die ich gelesen habe, ich habe nur gesehen, eine Phase, die für jeden Bildschirm. Also, wie kann ich Sie erfüllen sowohl die Anforderungen in eine einzige Bühne? Ist es zu teuer, separate Phasen? (Ich habe gelesen, dass SpriteBatch Objekte sind schwer!)

Dies ist, wie ich das problem gelöst:

Loswerden hintergrund der Bühne, ich aktualisierte meine render-und resize-Funktionen wie folgt. Im Grunde habe ich verschoben der rechten unteren Ecke der hintergrund (-gutterWidth,-gutterHeight) und zweimal die Werte Rinne, Breite und Höhe zu region Breite und Höhe der textur-region. Die Phase ist jetzt vorbei 🙂

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

InformationsquelleAutor coolscitist | 2013-08-13

Schreibe einen Kommentar