我正在用phaser编写一些游戏,我遇到了sprite.kill()方法的问题。
有时当我调用sprite.kill()时,Phaser似乎会破坏身体的碰撞/重叠,但视觉元素(图像和可拖动对象)仍在屏幕上。
我通过foreach为所有对象设置了重叠方法:
garbList.forEach(function(g) {
trashList.forEach(function(t) {
game.physics.arcade.overlap(g.sprite, t.sprite, garbHitTrash);
});
});
我有一个garbageList和一个trashList,他们有一个覆盖被称为garbHitTrash的方法。
当调用garbHitTrash时,它只是“将垃圾扔到垃圾桶上”破坏它的精灵并从然后从garbList中弹出它。
function garbHitTrash(garb, trash) {
if(garb.trash === trash.type) {
result['acertos']++;
} else {
result['erros']++;
}
garb.kill();
popGarbage(garb)
console.log('garbList.length ' + garbList.length);
}
答案 0 :(得分:2)
如果您需要完全删除元素,请查看destroy
方法而不是kill
。调用kill
只是将某些属性设置为false
(如alive
或visible
)的简写。但是,由于您的对象仍然存在且仍在移动(我想,由于碰撞),这些属性可能会被另一个组件设置或重置。
答案 1 :(得分:0)
也许有点晚了,但我遇到了类似的问题。
让我说我不想在foo
中使用a.kill()game.physics.arcade.collide(a, b, foo);//funky behavior
game.physics.arcade.collide(b, a, foo);//works as intended
目前,我不知道为什么会这样。但是,如果你杀死或销毁“第二”物品,它似乎会更好。