CocosCreator 刚体与多边形碰撞器的单向碰撞(向上跳穿过时忽略碰撞)

const{ccclass,property}=cc._decorator;

@ccclass
export default class Player extends cc.Component{
	
	private _rigidBody:cc.RigidBody;
	private _disabledColliders:cc.PhysicsCollider[]=[];
	
	private onLoad():void{
		this._rigidBody=this.node.getComponent(cc.RigidBody);
		this._rigidBody.enabledContactListener=true;//激活接触侦听
	}
	
	private onPreSolve(contact:cc.PhysicsContact,selfCollider:cc.PhysicsCollider,otherCollider:cc.PhysicsCollider):void{
		let index=this._disabledColliders.indexOf(otherCollider);
		if(index>-1){
			//此碰撞器已经被忽略碰撞,则直接忽略碰撞
			contact.disabled=true;
		}else{
			let normal=contact.getWorldManifold().normal.mulSelf(-1);
			if(normal.y<-0.7){
				//加入_disabledColliders列表
				this._disabledColliders.push(otherCollider);
				contact.disabled=true;
			}
		}
	}
	
	private onEndContact(contact:cc.PhysicsContact,selfCollider:cc.PhysicsCollider,otherCollider:cc.PhysicsCollider):void{
		//接触结束,从_disabledColliders列表中移出
		let index=this._disabledColliders.indexOf(otherCollider);
		if(index>-1)this._disabledColliders.splice(index,1);

	}
}

碰撞回调顺序:

...
    Step
    Step
    BeginContact
    PreSolve
    PostSolve
    Step
    PreSolve
    PostSolve
    Step
    PreSolve
    PostSolve
    Step
    EndContact
    Step
    Step
    ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值