Javascript Phaser渲染“可见”设置为false的精灵吗?

Javascript Phaser渲染“可见”设置为false的精灵吗?,javascript,phaser-framework,Javascript,Phaser Framework,Phaser渲染“可见”设置为false的精灵吗 我正在做一个游戏,很像母舰,但有无限的地形。地形会随着您的行进而生成,由64x64大小的精灵(平铺)组成,正如您可以想象的那样,随着您的行进,大量精灵被添加到场景中。看不见的精灵将其visible属性设置为false,但随着玩家的移动和大量地形的生成,“我的帧速率”(FPS)会大幅下降。为什么只有屏幕上的精灵的visible属性设置为true?我反复检查,只有屏幕上的精灵才将其visible属性设置为true,我不明白为什么我的FPS会在执行过程

Phaser渲染“可见”设置为false的精灵吗


我正在做一个游戏,很像母舰,但有无限的地形。地形会随着您的行进而生成,由64x64大小的精灵(平铺)组成,正如您可以想象的那样,随着您的行进,大量精灵被添加到场景中。看不见的精灵将其visible属性设置为false,但随着玩家的移动和大量地形的生成,“我的帧速率”(FPS)会大幅下降。为什么只有屏幕上的精灵的visible属性设置为true?我反复检查,只有屏幕上的精灵才将其visible属性设置为true,我不明白为什么我的FPS会在执行过程中下降这么多,Phaser是否仍将visible设置为false来渲染这些精灵?

而不是不断创建新精灵,然后
.kill()
,你应该回收雪碧

下面是一个关于

这与粒子效果中使用的技术相同(因此,如果粒子生成器无限运行,它只创建有限数量的粒子)

以下是使用的步骤:

  • Phaser.Group
  • 渲染每个精灵的初始场景(位置、图像)
  • 当精灵移出屏幕时(签入
    更新
    使用),然后
    .kill()
  • 当需要在屏幕上绘制一个新的精灵时,使用
    getFirstExists(false)
    获取一个不可见的重复使用的精灵
  • 更新精灵的图像和位置
  • 告诉游戏使用
    .resove()

  • 瞧!您将看到性能的大幅提升。(特别是如果您以前尝试创建1000个精灵)

    而不是不断创建新精灵,然后
    .kill()
    对其进行处理,您应该回收精灵

    下面是一个关于

    这与粒子效果中使用的技术相同(因此,如果粒子生成器无限运行,它只创建有限数量的粒子)

    以下是使用的步骤:

  • Phaser.Group
  • 渲染每个精灵的初始场景(位置、图像)
  • 当精灵移出屏幕时(签入
    更新
    使用),然后
    .kill()
  • 当需要在屏幕上绘制一个新的精灵时,使用
    getFirstExists(false)
    获取一个不可见的重复使用的精灵
  • 更新精灵的图像和位置
  • 告诉游戏使用
    .resove()

  • 瞧!您将看到性能的大幅提升。(特别是如果您以前尝试创建1000个精灵)

    我想即使您将可见性设置为false,旧地形仍会保留在内存中,从而导致性能问题。你能实现一个足够填充场景的地形精灵池吗。当一个精灵离开场景时,它会回到水池中,在需要的地方放进场景中?类似于人们对子弹池的处理方式。那么您在游戏循环中没有创建元素。@ste2425我是否应该在瓷砖消失时移除(销毁)它们并将其存储在内存中?我不明白它们为什么会造成这种性能影响,因为它们的visible设置为false(所以不应该渲染?),没有更新或进行任何物理检查。我使用Chrome的Javascript profiler检查了导致FPS下降的原因,是渲染循环导致了这种下降,这就是为什么我认为尽管在屏幕外,visible设置为false,但FPS仍在渲染。在读取一些明显的sprite.kill()后,会停止渲染该sprite,我将试一试,看看它是否有助于提高性能。我想,即使将可见性设置为false,旧地形仍会保留在内存中,从而导致性能问题。你能实现一个足够填充场景的地形精灵池吗。当一个精灵离开场景时,它会回到水池中,在需要的地方放进场景中?类似于人们对子弹池的处理方式。那么您在游戏循环中没有创建元素。@ste2425我是否应该在瓷砖消失时移除(销毁)它们并将其存储在内存中?我不明白它们为什么会造成这种性能影响,因为它们的visible设置为false(所以不应该渲染?),没有更新或进行任何物理检查。我使用Chrome的Javascript profiler检查了导致FPS下降的原因,是渲染循环导致了这种下降,这就是为什么我认为尽管在屏幕外,visible设置为false,但FPS仍在渲染。在读取一些明显的sprite.kill()后,会停止渲染该sprite,我将试一试,看看它是否有助于表演。