java - 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)
}
}
}
解决方案
从列表中删除元素会重复其不安全的做法。最好在单独循环中绘制循环之前进行剔除(删除不可见元素)。这里有一些解释:
推荐阅读
- r - Rmarkdown 中的 ifelse 语句和内联注释
- python - PyQt5 - 撤消实现
- scala - 弹性4s。Scala 模块需要 Jackson Databind 版本
- javascript - 在其边缘附近单击时,如何避免光标跳转到输入的开头?
- vue.js - 补丁 axios vue js 无法获取id
- python - 在 Python 中随机生成二维列表
- github - 如何解决启动 Github Desktop (win10) 报错:无法锁定配置文件,权限被拒绝
- java - 如何在接口实现中使用泛型构造函数?
- excel - 如何仅计算excel列中的条目一定次数?
- excel - 如何将包含公式和值的列复制到 Excel ListObject 表?