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

Phaser sprite.kill() sometimes doesn't work

我正在用移相器编写一些游戏,但我遇到了方法 sprite.kill() 的问题。

有时当我调用 sprite.kill() Phaser 似乎会破坏 collisions/overlapping 的主体,但视觉元素(图像和可拖动对象)仍在屏幕上。

我已经通过 foreach 为所有对象设置了重叠方法:

garbList.forEach(function(g) {                                                                                                    
    trashList.forEach(function(t) {                                                                                               
        game.physics.arcade.overlap(g.sprite, t.sprite, garbHitTrash);                                                            
    });                                                                                                                           
});

我有一个 garbageList 和一个 trashList,它们有一个称为 garbHitTrash 的重叠方法。

当调用 garbHitTrash 时,它只是 "throws the garbage on the trash" 销毁它的 sprite 并从 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);                                                                                
}

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

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

假设我不想 a.kill() in foo

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

目前,我不知道这是为什么。但如果你杀死或摧毁 'second' 物品似乎效果更好。