Java LibGDX内存泄漏

时间:2016-05-31 14:59:54

标签: java memory-leaks libgdx 2d render

我们正在为我们的学校作业制作2D俯视射击游戏。但是我们遇到了一个我们无法解决的问题。我们收到玩家并想要全部渲染。当我们评论给出的代码时,滞后消失并且RAM使用率是稳定的。但是,当我们离开零件时,ram将以50 MB / s的速度每秒增加。

我们在此代码中找不到错误,如果您有任何疑问,请告诉我们。 如果您需要更多信息,请告诉我,我会尽快回答。

            List<SimplePlayer> localMultiplayers = new ArrayList(this.multiplayers);
            this.multiplayers.clear();
            for (SimplePlayer splayer : localMultiplayers) {
                try {
                    Player p = new Player(splayer, this);
                    batch.setProjectionMatrix(game.camera.combined);
                    batch.begin();
                    p.render(batch);   
                    this.fontwhite.draw(batch, splayer.getName(), splayer.getX(), splayer.getY() + 76);
                    this.fontred.draw(batch, Integer.toString(splayer.getHitPoints()), splayer.getX() + 12, splayer.getY() + 64);
                    batch.end();
                } catch (Exception ex) {
                Logger.getLogger(GameScreen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
编辑:这段代码可以在我们的GameScreen.render()中找到,我们不知道这是不是问题。

1 个答案:

答案 0 :(得分:3)

圭多,不开玩笑泄漏:-)。每个渲染周期(大约每秒60次),您为每个客户创建新的Player实例(我只能假设)其中包含某种纹理。如果你不想再使用它,你必须调用Texture.dispose() - 否则它会泄漏。

修复方法是单独创建玩家列表(在玩家加入/离开游戏时添加/删除玩家)并继续调用他们的渲染方法而不创建新实例。