Phaser sprite.kill()有时不起作用

时间:2015-05-16 23:02:06

标签: javascript html5 phaser-framework

我正在用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);                                                                                
}

2 个答案:

答案 0 :(得分:2)

如果您需要完全删除元素,请查看destroy方法而不是kill。调用kill只是将某些属性设置为false(如alivevisible)的简写。但是,由于您的对象仍然存在且仍在移动(我想,由于碰撞),这些属性可能会被另一个组件设置或重置。

答案 1 :(得分:0)

也许有点晚了,但我遇到了类似的问题。

让我说我不想在foo

中使用a.kill()
game.physics.arcade.collide(a, b, foo);//funky behavior
game.physics.arcade.collide(b, a, foo);//works as intended

目前,我不知道为什么会这样。但是,如果你杀死或销毁“第二”物品,它似乎会更好。