0

私は本当にこれについて助けが必要です。私はゲームで作業していますが、オブジェクトを含むリストから要素が削除されるたびに遅れるという問題が発生しました。私は解決策を探し、イテレータを使用してラグを減らす方法を見つけましたが、それでも遅れます。ArrayList と LinkedList の両方を使用しましたが、どちらも同じ結果になります。

これは、リストに使用しているコードの例です。

初期化:

private LinkedList<Background> bg = new LinkedList<Background>();

与える:

for (Iterator<Background> iterator = bg.iterator(); iterator.hasNext();) {
            Background back = iterator.next();
            if (back.getX()-(-width-1) > 0) {
                if ((back.getX() < width) || (back.getX()+width > 0)) {
                    back.draw(canvas);
                } else {
                    iterator.remove();
                }
            }
        }

これは、back.draw(canvas); オブジェクト クラス内の draw 関数です。から呼び出しています:

    public void draw(Canvas canvas) {
    // where to draw the sprite
    Rect destRect = new Rect(getX(), getY(), getX() + spriteWidth, getY() + spriteHeight);
    canvas.drawBitmap(bitmap, sourceRect, destRect, null);
    //canvas.drawBitmap(bitmap, 20, 150, null);
    //Paint paint = new Paint();
    //paint.setARGB(50, 0, 255, 0);
    //canvas.drawRect(20 + (currentFrame * destRect.width()), 150, 20 + (currentFrame * destRect.width()) + destRect.width(), 150 + destRect.height(),  paint);
}

FPS を扱う MainThread に何か変更が必要なのではないでしょうか? または、他の解決策はありますか?セットについて聞いたことがありますが、試してみる良い例が見つからないようです。

指摘すべきことは、OpenGL ではなく Canvas を使用していることです。他に指摘すべきことは、上記の配列の各要素の画像サイズが 800x480 であることです。画質を落としてみましたが、あまり変わりません。

ありがとうございました。

4

2 に答える 2

1

それはおそらくあなたがドローで行っている計算の量に関係しています。あなたが使っているコレクションとは何の関係もないと思います。

于 2012-11-08T10:11:52.863 に答える
0

あなたが投稿したコードを考えると、アイテムを削除する aLinkedListと anIteratorが確かに最速だと思います。ただし、リストの他の使用法も考慮する必要があります。

于 2012-11-08T10:20:51.803 に答える