我真的需要帮助。我正在使用游戏并遇到一个问题,每当元素从我的列表中删除对象时它就会滞后。我已经搜索了解决方案并发现了使用迭代器来减少延迟,但是,它仍然滞后。我已经使用了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();
}
}
}
这是对象类中的draw函数,其中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);
}
也许在MainThread中需要更改一些处理FPS的东西?或者还有其他解决方案吗?我听说过套装,但似乎找不到任何好的例子试试看。
需要指出的是我使用的是Canvas,而不是OpenGL。 需要指出的是,上述数组中的每个元素的图像大小为800x480。我试图降低图像的质量,但它没有太大的区别。
谢谢。
答案 0 :(得分:1)
它可能与您在绘制时所做的计算量有关。我确信它与您使用的集合无关。
答案 1 :(得分:0)
根据您发布的代码,我会说删除项目的LinkedList
和Iterator
肯定是最快的。但是你还必须考虑列表的其他用法。