首页 > 解决方案 > Android 游戏 - 当实体从列表中删除时屏幕闪烁

问题描述

我在我的 android 游戏中使用 Canvas。当我删除实体列表中不再显示的实体时,所有其他实体都会短暂闪烁。当它不被删除时,就没有这样的问题。但由于我不是内存泄漏的忠实拥护者,所以这不是一个选择。

画布渲染系统已经被设计为双缓冲,我完全不知道如何解决这样的问题。我想可能是因为列表在删除项目后自行排序并尝试将其更改为 Set,但这也不起作用。

有谁知道为什么会发生这种情况以及如何解决?

代码结构:

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)
            
            }
         }
    }

标签: javaandroidkotlingame-enginegame-development

解决方案


从列表中删除元素会重复其不安全的做法。最好在单独循环中绘制循环之前进行剔除(删除不可见元素)。这里有一些解释:

迭代时从集合中删除元素


推荐阅读