LibGDX Sprite 渲染问题

LibGDX Sprite Rendering issues

我正在使用 LibGDX 并且在渲染 Sprites 时遇到了问题,我已经为此工作了 6 个小时,现在我快要崩溃了.

如果我只画精灵,精灵会这样画(绿色的小东西:https://gyazo.com/6a70bb710fdd6bb9d372cef050cb6c4e

如果我在那之后绘制任何东西,假设我的 rayHandler,精灵不绘制:https://gyazo.com/432d7cbd19f55b6be7252537b14cd35b

这是我的渲染方法:

    @Override
public void render(float delta) {

    /**
     * Clear screen.
     */
    Gdx.gl.glClearColor(0, 0, 0, 0);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    continuousInput(delta);
    update(delta);

    /**
     * Start 'spriteBatch'.
     */
    spriteBatch.begin();
    spriteBatch.setProjectionMatrix(cameraHandler.orthographicCamera.combined);
    spriteBatch.disableBlending();

    /**
     * Render our handlers
     */
    spriteBatch.draw(texture, 100, 1);
    //mapHandler.render(delta);
  //  lightHandler.render(delta);
 //   playerHandler.render(delta, spriteBatch);
    spriteBatch.draw(texture, 100, 1);
    spriteBatch.draw(texture, 1, 1);

    /**
     * End 'spriteBatch'.
     */
    spriteBatch.end();
}

我的项目相当大,所以我不会包含任何具体内容 类,但如果你们知道这是一个常见问题,那么解决方案将非常有帮助。 这是我整个项目的代码,最后弄得乱七八糟,因为我非常激动。

注意:地图和一切都呈现良好,我认为这是 spriteBatch 的问题,但我无法弄清楚。

来源:http://www.filedropper.com/resident

再次感谢您!任何回应表示赞赏。 - 杰克

最明显的问题是您在 spriteBatch.begin()end() 之间绘制非 SpriteBatch 内容。当您调用 spriteBatch.begin() 时,它会设置其着色器及其参数、混合参数等,并且在调用 end() 之前不会期望它们被其他对象更改。

我假设您的 lightHandler.render() 正在调用 box2dlights 中的某些东西来将光渲染到场景中,因此该对象将修改当前活动的着色器并且混合参数和 sprite 批处理不知道发生了,无法反应。

因此,在绘制未使用 sprite 批处理绘制的任何内容之前调用 spriteBatch.end()。如果您需要在非 SpriteBatch 对象之上绘制精灵,您可以再次调用 begin()