私は本当にこれについて助けが必要です。私はゲームで作業していますが、オブジェクトを含むリストから要素が削除されるたびに遅れるという問題が発生しました。私は解決策を探し、イテレータを使用してラグを減らす方法を見つけましたが、それでも遅れます。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 であることです。画質を落としてみましたが、あまり変わりません。
ありがとうございました。