【问题标题】:Libgdx SpriteBatch draws Actors, but not other TexturesLibgdx SpriteBatch 绘制 Actor,但不绘制其他纹理
【发布时间】:2016-07-08 15:49:38
【问题描述】:

自从我使用 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,所以我不认为这是纹理问题。

我还应该检查什么才能绘制纹理?

【问题讨论】:

  • 这是您的实际代码吗?调用 spriteBatch.begin() 后跟 stage.draw() 将引发 RuntimeException。
  • stage.draw() 在批次内部调用 beginend。要绘制其他内容,您需要将这些绘制调用包装在 begin()end() 中。
  • 奇怪。这是我的实际代码,我没有遇到异常。不过,将 batch.begin 移到绘图调用下方确实可以解决问题。 (作为答案发布,以便我接受)
  • 你能展示你的create方法吗?也许您正在使用两个精灵批次。如果没有传递给它的构造函数,Stage 会实例化它自己的。
  • 我用一个空的构造函数来实例化 Stage,所以我可能确实有两个在使用,我会更正 - 感谢您的提示!

标签: java libgdx spritebatch


【解决方案1】:

通常,您的代码会导致 RuntimeException,因为您在绘制舞台之前对批处理调用了 begin。但由于您实际上有两个精灵批次(一个在舞台内部,因为您没有与它共享原始数据),因此不会发生实际错误。

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

并且你应该将那个精灵批次传递给舞台构造函数,因为拥有多个精灵批次是浪费的。每个精灵批次使用相当多的内存并编译一个着色器。

【讨论】:

    猜你喜欢
    • 2014-09-05
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多