Libgdx中if条件内调用batch.draw绘制Texture无显示问题求助
问题解决:LibGDX中条件触发后Texture不显示的问题
问题原因
你当前的代码只在第50次按下空格的那一帧执行了batch.draw()操作,而LibGDX的渲染是持续刷新的——每一帧都会重新绘制屏幕内容。这意味着你画的Texture只在那一瞬间出现一次,之后的帧不会再绘制它,所以肉眼几乎看不到。
解决方案
需要用一个状态变量标记是否要显示Texture,然后在每帧的渲染流程中判断这个变量,持续绘制:
- 先在类中添加状态变量:
private int clicks = 0; private boolean showSpider = false; // 标记是否显示Texture
- 修改按键触发的逻辑,只修改状态变量,不在这里绘制:
if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) { clicks++; System.out.println(clicks); if (clicks == 50) { showSpider = true; // 触发显示状态 System.out.println("you have 50"); } }
- 在
render()方法的主绘制流程中,根据状态变量绘制Texture:
@Override public void render(float delta) { // 必须先清屏,否则画面会残留之前的渲染内容 Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.begin(); // 这里可以绘制你其他需要显示的内容 // ... // 根据状态判断是否绘制目标Texture if (showSpider) { batch.draw(spider, 100, 100); } batch.end(); }
额外注意事项
- 确保
spiderTexture已经正确加载(比如在create()方法中完成加载,且未被提前释放)。 - 若之后需要隐藏这个Texture,只需将
showSpider设为false即可。
内容的提问来源于stack exchange,提问作者Marcel1510
相关产品推荐
相关产品推荐

