当从列表中删除实体时,java Android游戏屏幕闪烁
我在安卓游戏中使用画布。当我删除实体列表中不再显示的实体时,所有其他实体都会闪烁一小段时间。如果不移除,则不存在此类问题。但由于我不太喜欢内存泄漏,这不是一个选择
画布渲染系统已经通过设计实现了双缓冲,我完全不知道如何解决这样的问题。 我一直认为这可能是因为列表在删除项后自动排序,并尝试将其更改为一个集合,但这也不起作用
有人知道为什么会发生这种情况以及如何解决吗
守则的结构:
private val gameObjects: List<GameObject> = mutableListOf()
fun update(deltaTime: Long)
{
gameObjects.forEach {
it.update(deltaTime)
}
fun render(canvas: Canvas)
{
gameObjects.forEach {
when (getVisibilityStatus(it.virtualY))
{
VisibilityStatus.VISIBLE -> it.render(canvas, virtualToPhysicalY(it.virtualY))
VisibilityStatus.BELOW_SCREEN ->
{
if (virtualToPhysicalY(it.virtualY) > screenSizePairXY.second)
gameObjects.remove(it)
}
}
}
# 1 楼答案
从列表中删除元素并不是安全的做法。最好在单独的周期中绘制周期之前进行剔除(删除不可见的元素)。以下是一些解释:
Remove elements from collection while iterating