【问题标题】:PIXI how to completely remove a spritePIXI 如何完全移除一个精灵
【发布时间】:2019-10-13 11:23:54
【问题描述】:

我正在尝试从我的游戏中完全删除一个精灵(充当死亡)。我在网上只能找到:

sprite.parent.removeChild(sprite);

当我这样做时,精灵停止渲染,但我很确定精灵仍然存在,并且我的碰撞仍然被检测到并且它导致了很多问题。如何从场景中完全移除精灵?

【问题讨论】:

  • 我不认为 PixiJS 包含碰撞检测。你能详细说明你是如何检测碰撞的吗?也许这也只是从碰撞检测系统中删除精灵的问题。

标签: pixi.js


【解决方案1】:

当没有指向它的引用并且 GC(垃圾收集器)运行时,一个实体在 javascript 中被删除。因此,要完全删除 sprite,您需要将其与所有内容取消链接。

如果你有一个 SpriteContainer 并且在其中你做了

mySprite = new PIXI.Sprite(myTexture)
this.addChild(mySprite)

那么您需要像以前一样使用removeChild,但还要清除mySprite 引用。

现在请考虑 GC 运行是由浏览器引擎管理的,因此您实际上可能需要等待一段时间才能看到精灵从内存中消失。

如果你在 chrome 控制台中引用了它,这也是对精灵的引用,如果你打开它,它不会被删除。

要确认 Sprite 是否被删除,请使用浏览器的开发工具,在删除前后拍摄内存快照,并使用内置的比较工具。如果您看到 Sprite(以及可选的 Texture 和 BaseTexture)的 delta 为 -1,那么您很好。您也可以在开发者的工具中手动调用 GC。

注意:PIXI.Sprite 显示纹理。 Sprite 的移除不一定会导致纹理的移除。 PIXI 有自己的 GC 会处理废弃的纹理,但如果您的对象经常被创建和删除,最好将纹理保留在内存中,这样加载时不会导致卡顿。要清除精灵的内容,请参考destroy 方法,如下所述:http://pixijs.download/dev/docs/PIXI.Sprite.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2018-03-21
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多