2016-05-31 8 views
0

私たちは学校の割り当てのために2Dのトップダウンシューティングゲームを作っています。しかし、我々は解決できない問題に直面した。我々は選手を​​受け取り、それらをすべてレンダリングしたい。与えられたコードにコメントを付けると、遅れはなくなり、RAMの使用は安定しています。しかし、私たちが部品を残しておくと、ラムは毎秒50MBで増えます。Java LibGDXメモリリーク

このコードではエラーが見つかりません。ご存じの場合はお知らせください。 さらに詳しい情報が必要な場合は、すぐに私に連絡してください。

  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()にありますが、これが問題であるかどうかはわかりません。

+0

プレイヤーが1人の場合はどうなりますか?それは問題があるかどうかをあなたに伝えることができます。プレイヤークラスと、おそらく新しいプレイヤーを担当するコードを配列リストに追加してください。 – eldo

答えて

3

グイド、冗談は漏れます:-)。各レンダリングサイクル(1秒間に約60回)は、あなたのクライアントごとに新しいPlayerインスタンスを作成しています。 Texture.dispose()をもう使用したくない場合は、Texture.dispose()を呼び出す必要があります。それ以外の場合は、リークします。

修正点は、プレイヤーリストを別々に作成し(プレイヤーの参加/退場時にプレーヤーを追加/削除する)、新しいインスタンスを作成せずにレンダーメソッドを呼び出すことです。

+0

はい、あなたは絶対に正しいです。すべてのテンポラリをすべてのプレーヤーに何度も何度も繰り返し読み込んでいます。私たちは静的なテクスチャを作成し、今それは固定されています:) – Guido

関連する問題