Android 游戏 - 从列表中删除实体时屏幕闪烁
Android Game - Screen Flickers When an Entity Removed From The List
我在 android 游戏中使用 Canvas。当我在我的实体列表中删除一个不再显示的实体时,所有其他实体都会短暂闪烁。如果不删除,则不会出现此问题。但由于我不是内存泄漏的忠实粉丝,所以这不是一个选择。
canvas 渲染系统已经设计为双缓冲,我完全不知道如何解决这个问题。
我想可能是因为列表在删除项目后自行排序并尝试将其更改为集合,但这也没有用。
有谁知道为什么会发生这种情况以及如何解决它?
代码结构:
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)
}
}
}
从列表中删除元素是一种不安全的做法。在单独的循环中绘制循环之前进行剔除(删除不可见元素)会更好。这里有一些解释:
Remove elements from collection while iterating
我在 android 游戏中使用 Canvas。当我在我的实体列表中删除一个不再显示的实体时,所有其他实体都会短暂闪烁。如果不删除,则不会出现此问题。但由于我不是内存泄漏的忠实粉丝,所以这不是一个选择。
canvas 渲染系统已经设计为双缓冲,我完全不知道如何解决这个问题。 我想可能是因为列表在删除项目后自行排序并尝试将其更改为集合,但这也没有用。
有谁知道为什么会发生这种情况以及如何解决它?
代码结构:
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)
}
}
}
从列表中删除元素是一种不安全的做法。在单独的循环中绘制循环之前进行剔除(删除不可见元素)会更好。这里有一些解释:
Remove elements from collection while iterating