为什么子弹销毁放在碰撞处理函数里子弹看起来会没有集中敌人?

原来的看起来没有击中敌人的代码:
bullet.js

    onCollisionEnter:function(other,self){
        this.node.destroy();
    },

新的看起来击中了敌人的代码:
bullet.js

    onCollisionEnter:function(other,self){
        this.collishionWithEnemy = true;
    },

    onLoad: function () {
        this.collishionWithEnemy = false;
    },

    update (dt) {
        if(this.collishionWithEnemy){
            this.node.destroy();
        }
    },

第二种虽然还有点瑕疵但是比第一种好多了,反正我是不会在意了。

我用的子弹是一张 128 * 2 像素的图片。

1赞

碰撞处理在 如图红色标记的地方。你在碰撞处理函数销毁了节点,那么显然,在渲染层之前,Obj._deferredDestroy会删掉被标记销毁的物体, 这个节点就不会渲染了。所以就印证了如题的现象。

如图所示,update层 比 schedule层(碰撞处理在schedule层)先执行,所以!你改进的代码中,你在碰撞处理函数标记collishionWithEnemy =true,由于该帧的update在碰撞处理之前就执行过了,因此渲染层依然会渲染这个物体,下一帧的update才会 判断collishionWithEnemy =true才移除物体。

楼主改进后的写法是正确的,没有瑕疵。

lateUpdate{
if(this.collishionWithEnemy){
this.node.destroy();
}
}

会不会更好?

同一帧下 ,lateupdate在 碰撞层之后运行,这样写的话,又会回到楼主标题提到的问题了