我真的需要这个帮助。我正在玩一款游戏,遇到了一个问题,每次从我的对象列表中删除一个元素时它都会滞后。我已经搜索了解决方案,并发现了使用迭代器来减少滞后,但它仍然滞后。我同时使用了 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); 来自:
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 中必须更改某些内容?或者有没有其他解决方案?我听说过集合,但似乎找不到任何好的例子来尝试一下。
需要指出的是,我使用的是 Canvas,而不是 OpenGL。还有一点需要指出的是,上述数组中的每个元素都有一个 800x480 的图像大小。我试图降低图像的质量,但这并没有太大的区别。
谢谢你。