1

オブジェクトがクリックされ、リストから削除する必要がある場合にのみドロップします。コードは次のとおりです。

if(event.type == TouchEvent.TOUCH_DOWN){
            for(Bottle bottle : new ArrayList<Bottle>(bottles)){
                if(bottle.position.dist(touchPoint) < 40 ){
                    bottles.remove(bottle);
                    if(bottle.type == Bottle.BOTTLE){
                        score+=10;
                        Assets.playSound(Assets.beeropenSound);
                    }
                    else if (bottle.type == Bottle.BOTTLE30){
                        score+=30;
                        Assets.playSound(Assets.beeropenSound);
                    }
                    else if (bottle.type == Bottle.GLASS_OF_BEER){
                        score+=5;
                        Assets.playSound(Assets.pourbeerSound);
                    }
                    else if (bottle.type == Bottle.WATER_BOTTLE){
                        score-=50;
                    }

                    // burping
                    if (score % 200 == 0 && score > 1){
                        Assets.playSound(Assets.burpSounds[burp]);
                    }
                    break;
                }
            }

、およびここにfpsログがあります:

01-20 19:18:19.629: D/FPS(27501):  59
01-20 19:18:20.639: D/FPS(27501):  59
01-20 19:18:21.639: D/FPS(27501):  49
01-20 19:18:22.649: D/FPS(27501):  59
01-20 19:18:23.669: D/FPS(27501):  60
01-20 19:18:24.669: D/FPS(27501):  59
01-20 19:18:25.689: D/FPS(27501):  60
01-20 19:18:26.699: D/FPS(27501):  43
01-20 19:18:27.719: D/FPS(27501):  60
01-20 19:18:28.739: D/FPS(27501):  60
01-20 19:18:29.759: D/FPS(27501):  60

私はこのようなものを削除しようとしましたが、そうではありません:

  • 効果音の除去
  • ストリーミングバックグラウンドミュージックを削除します(3mb mp3ファイル)
  • ArrayListのコピーを削除し、真のボトルリストを繰り返し、削除する必要があるものを別のリストに追加して、そのリストをボトルリストから削除します
  • Assets.burpSounds [burp]:げっぷは、ランダムJavaマドルでランダムに生成されたローカル変数でした。私はそれを削除しました(げっぷはコンストラクターにあります)それは機能しませんでした...

1つ残っているのは、ガベージコレクターです。それが私のfpsを落とす原因ですか?どうすれば確認できますか?これらの敵と戦う方法は?

そして、前に言ったように、このコードブロックが実行されたときにのみドロップします。

4

1 に答える 1

1

それもGCだと思います。実際にオブジェクトを削除するのではなく、オブジェクトが「削除された」ことを示すフラグをボトルリストに追加して、GCを回避します。

編集: タッチするたびに新しい arraylist を作成するのはなぜですか? それはちょうどあるべきではありません:

for( Bottle bottle : bottles ) {...}
于 2013-01-20T20:50:58.307 に答える