Libgdx hintergrund und Vordergrund in eine einzige Bühne
Meine Anforderungen:
- Hintergrund-Füllung gesamten physischen Bildschirm (dehnen, falls erforderlich)
- 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie zwei Stufen, aber für dein Fall wäre es besser, einfach lösen dieses problem durch die Schaffung von zwei Gruppen innerhalb einer einzigen Bühne:
Sie können die Ansichtsfenster in den Vordergrund, dann resize Grenzen des hintergrund Bild exakt die Größe, die Sie möchten, es zu sein. Sie könnte sogar dazu führen, dass das Bild getrennt von der Bühne, wie einer textur, die region, die es erlauben würde, dass Sie machen Sie es wie Sie wollen. Es gibt ein paar Optionen, aber es gibt keinen Grund für die Verwendung von zwei Stufen zu tun. Es sei denn, Sie Rendern möchten Sie eine Tonne von Zeug (zusätzlich zu Ihrem Hintergrundbild) im hintergrund, dann zwei Stufen vielleicht mehr Sinn machen.
Ja das habe ich getan. Ich fügte hinzu, verschiebt sich 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 🙂
InformationsquelleAutor Jyro117