我使用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
再一次,谢谢!任何回应表示赞赏。 - 杰克
答案 0 :(得分:2)
最明显的问题是你在spriteBatch.begin()
和end()
之间绘制非SpriteBatch内容。当您调用spriteBatch.begin()
时,它会设置其着色器及其参数,混合参数等,并且在调用end()
之前不会指望其他对象更改它们。
我假设您的lightHandler.render()
正在调用box2dlights中的某些内容来将光渲染到场景中,因此该对象将修改当前活动的着色器,并且混合参数和精灵批次将不知道发生了什么,无法做出反应。
所以在绘制未使用精灵批处理绘制的任何内容之前调用spriteBatch.end()
。如果你需要在非SpriteBatch之上绘制精灵,你可以再次调用begin()
。