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()
。
我正在使用 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()
。