PIXI 如何完全删除精灵

PIXI how to completely remove a sprite

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

sprite.parent.removeChild(sprite);

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

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

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

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

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

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

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

要确认 Sprite 是否被删除,请使用浏览器的开发者工具,拍摄删除前后的内存快照,并使用 built-in 比较工具。如果您看到 Sprite(以及可选的纹理和基础纹理)的增量为 -1,则表示很好。您也可以在开发者工具中手动调用GC。

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