Libgdx SpriteBatch绘制Actors,但不绘制其他纹理

时间:2016-07-08 15:49:39

标签: java libgdx spritebatch

自从我使用LibGdx以来已经有一段时间了,所以我觉得我只是错过了一些明显的东西。

我在MyGdxGame中的渲染方法看起来像这样,调用舞台绘制自己(及其演员),然后我尝试绘制一组纹理用于调试目的。

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

舞台与其一个演员一起绘制,但其他纹理未被绘制。

我尝试过:在舞台相机上设置批量投影矩阵(调用update后),确保纹理坐标可见。

演员从同一个TextureManager.getPlayerTexture获取其纹理,所以我不认为它是纹理问题。

我还应该检查什么才能获得纹理?

1 个答案:

答案 0 :(得分:1)

通常,您的代码会导致RuntimeException,因为您在绘制阶段之前在批处理上调用begin。但是因为你实际上有两个sprite批次(一个是舞台内部的,因为你没有与它共享原始版本),所以不会发生实际错误。

在绘制纹理后,您错过了对spriteBatch.end()的调用。对spriteBatch.begin()的调用需要在stage.draw()之后移动。

你应该将精灵批量传递给Stage构造函数,因为拥有多个精灵批处理是浪费的。每个精灵批处理使用相当数量的内存并编译着色器。