You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX中Table内图片无法显示,请求排查代码问题

为什么我的LibGDX代码运行正常但看不到图片?

先看一下你提供的代码:

public class MyGdxGame extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture img; 
    Stage stage; 

    @Override 
    public void create () { 
        stage=new Stage(); 
        batch = new SpriteBatch(); 
        Image mg=new Image(new Texture("badlogic.jpg")); 
        Table table=new Table(); 
        table.add(); 
        table.add(mg); 
        table.add(); 
        stage.addActor(table); 
    } 

    @Override 
    public void render () { 
        Gdx.gl.glClearColor(1, 0, 0, 1); 
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
        batch.begin(); 
        batch.end(); 
        stage.draw(); 
    } 

    @Override 
    public void dispose () { 
        batch.dispose(); 
    }
}

看不到图片的核心原因是你的Table没有正确占据Stage的空间,导致图片所在的布局容器根本没显示在可视区域里,具体问题和修复方案如下:

主要问题分析

  1. Table未绑定到Stage视口
    你创建了Table但没有设置它填充整个Stage,默认情况下Table的大小只是刚好包裹它的内容。而你添加的两个空table.add()单元格没有任何尺寸,整个Table会缩成一个很小的区域(甚至可能是0尺寸),图片自然就看不到了。

  2. 空白单元格未设置扩展规则
    就算Table有了尺寸,你原来的table.add()只是添加空单元格,但没有让它们占据剩余空间,图片会被挤在左上角,但因为Table本身没大小,还是显示不出来。

  3. 资源销毁不完整(潜在问题)
    你创建了Texture但没有在dispose()里释放,而且img变量完全没用到,会造成内存泄漏。另外Stage也需要销毁。

修复后的代码

public class MyGdxGame extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture img; 
    Stage stage; 

    @Override 
    public void create () { 
        stage = new Stage(); 
        batch = new SpriteBatch(); 
        // 保存Texture引用,方便后续销毁
        img = new Texture("badlogic.jpg"); 
        Image mg = new Image(img); 
        Table table = new Table(); 
        // 关键:让Table填满整个Stage的视口
        table.setFillParent(true); 
        // 让左侧空白单元格占据水平剩余空间
        table.add().expandX(); 
        table.add(mg); 
        // 让右侧空白单元格占据水平剩余空间,实现图片居中
        table.add().expandX(); 
        stage.addActor(table); 
    } 

    @Override 
    public void render () { 
        Gdx.gl.glClearColor(1, 0, 0, 1); 
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
        // 这里的SpriteBatch begin/end是多余的,Stage自己会处理渲染
        stage.draw(); 
    } 

    @Override 
    public void dispose () { 
        batch.dispose(); 
        // 销毁Texture,释放GPU资源
        img.dispose(); 
        // 销毁Stage及其内部的所有Actor
        stage.dispose(); 
    }
}

关键修改点说明

  • table.setFillParent(true):强制Table的大小和Stage的视口一致,这样布局才能在整个屏幕范围内生效。
  • table.add().expandX():让空白单元格扩展以占据水平方向的剩余空间,从而将图片居中显示。
  • 完善dispose()方法:清理所有创建的资源,避免内存泄漏。
  • 移除无用的batch.begin()/batch.end():Stage内部有自己的SpriteBatch,不需要额外调用。

内容的提问来源于stack exchange,提问作者Grinning Trout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:47:46