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); 来自:

    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 的图像大小。我试图降低图像的质量,但这并没有太大的区别。

谢谢你。

4

2 回答 2

1

它可能与您在绘图中所做的计算量有关。我确信它与您使用的收藏无关。

于 2012-11-08T10:11:52.863 回答
0

鉴于您发布的代码,我会说 aLinkedList和 anIterator删除项目肯定是最快的。但是您还必须考虑到列表的其他用途。

于 2012-11-08T10:20:51.803 回答