PIXI如何彻底删除精灵

时间:2019-05-28 00:05:07

标签: pixi.js

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

// app.js file

const express = require('express')
const routes = require('./routes')


const app = express()

app.use('/api', routes)

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

1 个答案:

答案 0 :(得分:1)

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

例如,如果您有一个SpriteContainer并且在其中,您便是

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

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

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

如果您在chrome控制台中引用了它,则它也是对sprite的引用,如果打开它,它将不会被删除。

要确认Sprite被删除,请使用浏览器的开发人员工具,在删除之前和之后拍摄内存快照,并使用内置的比较工具。如果您看到Sprite的增量为-1(并且还可以选择其Texture和BaseTexture),则感觉很好。您还可以在开发人员的工具中手动调用GC。

注意:PIXI.Sprite显示一个Texture。删除Sprite不一定会导致删除Texture。 PIXI拥有自己的GC,可以处理废弃的纹理,但是如果经常创建和删除对象,则最好将纹理保留在内存中,这样在加载时不会造成结结。要清除子画面的内容,请参考destroy方法,如此处所述:http://pixijs.download/dev/docs/PIXI.Sprite.html