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");
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Cocos Creator中,可以通过给按钮添加回调函数来实现按钮的点击事件。引用\[1\]中的代码展示了如何创建一个按钮预设,并给按钮添加点击事件的示例。首先,使用cc.instantiate方法创建一个按钮预设,然后将其添加到指定的父节点上。接下来,创建一个cc.Component.EventHandler实例,设置其目标节点为当前节点,脚本名称为"RoleViewCtrl",回调函数为"onRoleListBtnClick"。然后,获取按钮组件,并将刚刚创建的事件处理器添加到按钮的clickEvents数组中。 另一种常见的方式是在onLoad函数中添加按钮的点击事件回调。引用\[3\]中的代码展示了如何在onLoad函数中给按钮添加点击事件回调。首先,创建一个cc.Component.EventHandler实例,设置其目标节点为当前节点,脚本名称为"clear_button",回调函数为"callback"。然后,获取按钮组件,并将刚刚创建的事件处理器添加到按钮的clickEvents数组中。在回调函数中,可以通过event.target获取到按钮节点,通过customEventData参数获取到之前设置的自定义数据。 这两种方式都可以实现按钮的点击事件回调,具体选择哪种方式取决于开发者的需求和代码结构。 #### 引用[.reference_title] - *1* *2* [cocoscreator 预设Button用代码添加回调](https://blog.csdn.net/Pan_mouren/article/details/86216916)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [cocos creator Button按钮组件怎么使用和按钮绑定事件](https://blog.csdn.net/qq_41542894/article/details/89383014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值