2016-07-08 15 views
0

Es ist schon eine Weile her, seit ich LibGdx benutzt habe, also habe ich das Gefühl, dass ich etwas Offensichtliches vermisse.Libgdx SpriteBatch zeichnet Actors, aber keine anderen Texturen

Meine Render-Methode in MyGdxGame sieht so aus und fordert die Bühne auf, sich selbst (zusammen mit ihren Schauspielern) zu zeichnen, und dann versuche ich, eine Reihe von Texturen für Debugging-Zwecke zu zeichnen.

@Override 
    public void render() 
    {   
     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     StageManager.getCurrentStage().act(); 

     spriteBatch.begin(); 
     StageManager.getCurrentStage().draw(); 
     for(int i = 0; i < 100; i++) 
     { 
      spriteBatch.draw(TextureManager.getPlayerTexture(), 50*i, 50*i); 
     } 
    } 

Die Bühne ist mit ihrem einen Akteur gezeichnet, aber die anderen Texturen werden nicht gezeichnet.

Was ich versucht habe: Setzen Batch-Projektionsmatrix von der Bühne Kamera (nach dem Aufruf update), stellen Sie sicher, dass die Textur Koordinaten sichtbar sein sollten.

Der Schauspieler bekommt seine Textur von der gleichen TextureManager.getPlayerTexture, also denke ich nicht, dass es ein Texturproblem ist.

Worauf sollte ich noch achten, um die Texturen zu erhalten?

+1

Ist dies Ihr tatsächlicher Code? Der Aufruf von 'spriteBatch.begin()' gefolgt von 'stage.draw()' löst eine RuntimeException aus. – Tenfour04

+1

'stage.draw()' ruft intern 'begin' und' end' im Batch auf. Um zusätzliche Zeichen zu zeichnen, müssen Sie diese Zeichenaufrufe in 'begin()' und 'end()' einschließen. – Tenfour04

+0

Seltsam. Es ist mein tatsächlicher Code, ich bekomme keine Ausnahme. Das Verschieben von batch.begin unterhalb des Zeichnungsaufrufs behebt das Problem jedoch. (Beitrag als Antwort also kann ich bitte annehmen) – DoubleDouble

Antwort

1

Normalerweise würde Ihr Code eine RuntimeException verursacht haben, weil Sie den Stapel erst beginnen, bevor Sie die Bühne zeichnen. Da Sie jedoch tatsächlich über zwei Sprite-Batches verfügen (eine intern zur Stage, weil Sie das Original nicht mit ihr geteilt haben), treten keine tatsächlichen Fehler auf.

Sie verpassen einen Anruf an spriteBatch.end() nach dem Zeichnen Ihrer Textur (s). Und der Anruf an spriteBatch.begin() muss nach stage.draw() verschieben.

Und Sie sollten diese Sprite-Batch in den Stage-Konstruktor übergeben, weil es verschwenderisch ist, mehr als einen Sprite Batch zu haben. Jede Sprite-Charge benötigt eine angemessene Menge an Speicher und kompiliert einen Shader.