通过collider组件对主角是怎么穿过建筑的思考。

前提:
creator中组件碰撞通过collider实现,首先为建筑添加一个collider组件,分组为building,为主角添加collider组件,分组为actor,并允许building和actor产生碰撞。
当collider碰撞,会回调三个函数,oncollisionenter,oncollisionstay,oncollisionout。我们只实现oncollisionenter函数就可以了。当主角和建筑碰撞时,判断主角运动方向,如果方向向左,就让主角往右回退一定距离,而bug的产生,就源于这个回退的距离,回退代码:
onCollisionEnter: function (other, self) {
if(other.node.group==“building”){
if(this.accLeft){ //从右边碰撞建筑
//碰撞回退速度
var v1= Math.abs(this.xspeed)>this.maxspeed?-1this.maxspeed:this.xspeed;
self.node.x-=v1
this.t;
}else if(this.accRight){ //从左边碰撞建筑
var v2= Math.abs(this.xspeed)>this.maxspeed?this.maxspeed:this.xspeed;
self.node.x-=v2this.t;
}else if(this.accUp){
var v3= Math.abs(this.yspeed)>this.maxspeed?this.maxspeed:this.yspeed;
self.node.y-=v3
this.t;
// self.node.y-=10;
}else if(this.accDown){
var v4= Math.abs(this.yspeed)>this.maxspeed?-1this.maxspeed:this.yspeed;
self.node.x-=v4
this.t;
}
}

思考:让主角回退的距离,有两种方法
1、主角向上,我们让主角后退固定距离,当这个固定距离太小,就会导致当主角的速度太大,前进距离大于固定距离,主角就会穿过建筑;如果固定距离过大,就会导致主角回退距离太大,影响观赏性。所以这个方法很垃圾,不采用
2主角回退距离由主角速度决定,速度越大,回退越多,那么会导致什么问题,当主角尖端碰到斜线时,一直向上加速,是不会穿过建筑的,当速度达到一定时,改变主角运动方向向左,由于向左的速度很小,主角只向右回退很小的距离,而向上的速度很大,就在一瞬间穿过建筑边界,不再产生碰撞。

1赞