回调"/>
CocosCreator使用物理引擎和回调
在2d中开启碰撞需要在项目设置–功能裁剪–2D物理系统【选择 基于Box2D的2D物理系统】
如果想要两个物体碰撞,则需要添加刚体和碰撞【!!重点】
设置刚体类型 可以设为四种,
Static 静态刚体,零质量,零速度,即不会受到重力或速度影响,但是可以设置他的位置来进行移动。该类型通常用于制作场景
Dynamic 动态刚体,有质量,可以设置速度,会受到重力影响。
Kinematic 运动刚体,零质量,可以设置速度,不会受到重力的影响,但是可以设置速度来进行移动
Animated 动画刚体,在上面已经提到过,从 Kinematic 衍生的类型,主要用于刚体与动画编辑结合使用
在设置碰撞体的时候可以选择Editing编辑碰撞体
Regenerate Points输入的值越小,点越密集
监听碰撞代码如下
import {_decorator,Component,Node,RigidBody2D,Collider2D,Contact2DType,PhysicsSystem2D,IPhysics2DContact,tween,Vec3,
} from "cc";
const { ccclass, property } = _decorator;@ccclass("rigidbodys")
export class rigidbodys extends Component {start() {// 注册单个碰撞体的回调函数let collider = this.getComponent(Collider2D);if (collider) {collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);collider.on(Contact2DType.END_CONTACT, this.onEndContact, this);collider.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);collider.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);}// 注册全局碰撞回调函数if (PhysicsSystem2D.instance) {PhysicsSystem2D.instance.on(Contact2DType.BEGIN_CONTACT,this.onBeginContact,this);PhysicsSystem2D.instance.on(Contact2DType.END_CONTACT,this.onEndContact,this);PhysicsSystem2D.instance.on(Contact2DType.PRE_SOLVE,this.onPreSolve,this);PhysicsSystem2D.instance.on(Contact2DType.POST_SOLVE,this.onPostSolve,this);}}onBeginContact(selfCollider: Collider2D,otherCollider: Collider2D,contact: IPhysics2DContact | null) {// 只在两个碰撞体开始接触时被调用一次console.log("onBeginContact");}onEndContact(selfCollider: Collider2D,otherCollider: Collider2D,contact: IPhysics2DContact | null) {// 只在两个碰撞体结束接触时被调用一次console.log("onEndContact");}onPreSolve(selfCollider: Collider2D,otherCollider: Collider2D,contact: IPhysics2DContact | null) {// 每次将要处理碰撞体接触逻辑时被调用console.log("onPreSolve");}onPostSolve(selfCollider: Collider2D,otherCollider: Collider2D,contact: IPhysics2DContact | null) {// 每次处理完碰撞体接触逻辑时被调用console.log("onPostSolve");}
}
更多推荐
CocosCreator使用物理引擎和回调
发布评论