Я пытаюсь полностью удалить спрайт из своей игры (действующий как смерть). Все, что я смог найти в Интернете, это:
sprite.parent.removeChild(sprite);
Когда я это сделал, спрайт перестает отображаться, но я почти уверен, что спрайт все еще там, и мои столкновения все еще обнаруживаются, и это вызывает много проблем. Как полностью убрать спрайт со сцены?
Сущность удаляется в javascript, когда нет ссылок, указывающих на нее, и запускается GC (сборщик мусора). Таким образом, чтобы полностью удалить спрайт, вам нужно отвязать его от всего.
Если у вас есть, например, SpriteContainer
и внутри него вы сделали
mySprite = new PIXI.Sprite(myTexture)
this.addChild(mySprite)
тогда вам нужно как использовать removeChild
, как вы это делали, так и очистить ссылку mySprite
.
Теперь учтите, что запусками сборщика мусора управляет движок браузера, поэтому вам может потребоваться некоторое время, прежде чем вы увидите, что спрайт исчез из памяти.
И если вы ссылаетесь на него в консоли Chrome, это тоже ссылка на спрайт, и он не будет удален, если он у вас открыт.
Чтобы подтвердить удаление Sprite, используйте инструмент разработчика браузера, сделайте снимок памяти до и после удаления и используйте встроенный инструмент сравнения. Если вы видите дельту -1 для Sprite (а также, возможно, для его Texture и BaseTexture), все в порядке. Вы также можете вручную вызвать GC в инструментах разработчика.
Примечание. PIXI.Sprite отображает текстуру. Удаление Спрайта не обязательно влечет за собой удаление Текстуры. PIXI имеет собственный GC, который позаботится о брошенных текстурах, но если ваш объект часто создается и удаляется, лучше хранить текстуру в памяти, чтобы она не вызывала заиканий при загрузке. Чтобы также очистить содержимое спрайта, обратитесь к методу destroy
, как описано здесь: http://pixijs.download/dev/docs/PIXI.Sprite.html
Я не думаю, что PixiJS включает обнаружение столкновений. Можете ли вы уточнить, как вы обнаруживаете столкновения? Возможно, это просто вопрос удаления спрайта из системы обнаружения столкновений.