cocos creator学习15——物理引擎碰撞检测

本文详细介绍了Cocos2d-x中物理引擎的碰撞检测机制,包括如何设置碰撞分组、启用接触监听,以及如何实现碰撞回调函数如onBeginContact、onEndContact等。此外还介绍了sensor属性的应用实例,例如利用sensor实现场景切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

物理引擎碰撞检测

在设置好碰撞分组和物理引擎后,并且在物理刚体组件中的Enabled Contact Listener 属性勾选上
组件
在每次刚体组件发生碰撞后,cocos就会搜索2个组件中的脚本,并且调用实现了的函数。

入口函数

入口函数调用条件
onBeginContact如果你的脚本中实现了这个函数,那么它将会在两个碰撞体开始接触时被调用
onEndContact如果你的脚本中实现了这个函数,那么它将会在两个碰撞体停止接触时被调用
onPreSolve如果你的脚本中实现了这个函数,那么它将会在接触更新时(碰撞持续)被调用。 你可以在接触被处理前根据他包含的信息作出相应的处理,比如将这个接触禁用掉。 注意:回调只会为醒着的刚体调用。 注意:接触点为零的时候也有可能被调用。 注意:感知体(sensor)的回调不会被调用
onPostSolve如果你的脚本中实现了这个函数,那么它将会在接触更新完后被调用。 你可以在这个回调中从接触信息中获取到冲量信息

有三个参数onBeginContact:function(contact,selfCollider,otherCollider)
contact:可以通过其读取刚体的信息,例如速度,弹性等等
selfCollider:自身碰撞组件
otherCollider:与其碰撞的碰撞组件

sensor属性应用

继上次的例子我们做一个场景切换的试验
sensor
当碰撞组件设置了sensor,其将只进行碰撞检测,不再有物理刚体的特性,更像是一种气体,碰撞的物体只能感知到,却不能撞到。通常用于作为关卡入口,事件触发的使用,比如一个物体接触到后场景切换。
例如:
body2中挂载一个test脚本,并且设置为sensor,和静态刚体
测试
test:

onBeginContact:function(contact,selfCollider,otherCollider){
        cc.director.loadScene('hello');
    }

测试效果
效果

CocosCreator实现的 解救人质 游戏,学会碰撞检测rescue.7z // Bullet.js cc.Class({ extends: cc.Component, properties: { mSpeed: 300, }, // LIFE-CYCLE CALLBACKS: // onLoad () {}, start() { var manager = cc.director.getCollisionManager(); // 获取碰撞检测系统 manager.enabled = true; }, update(dt) { // 设置子弹移动,当超出屏幕范围未发生碰撞时自动销毁 this.node.y += this.mSpeed * dt; if (this.node.y > 580) { console.log('超出屏幕范围,子弹销毁!'); this.node.destroy(); } }, /** * 当碰撞产生的时候调用 * @param {Collider} other 产生碰撞的另一个碰撞组件 * @param {Collider} self 产生碰撞的自身的碰撞组件 */ onCollisionEnter: function (other, self) { console.log('on collision enter'); if (other.tag == 1) { // 子弹碰到人质时,解救失败! console.log('解救人质失败!'); var failLabel = this.node.parent.getChildByName('failLabel'); failLabel.active = true; this.node.destroy(); } else if (other.tag == 2) { // 子弹碰到敌人时,解救成功! console.log('解救人质成功!'); var successLabel = this.node.parent.getChildByName('successLabel'); successLabel.active = true; this.node.destroy(); } }, /** * 当碰撞产生后,碰撞结束前的情况下,每次计算碰撞结果后调用 * @param {Collider} other 产生碰撞的另一个碰撞组件 * @param {Collider} self 产生碰撞的自身的碰撞组件 */ onCollisionStay: function (other, self) { console.log('on collision stay'); }, /** * 当碰撞结束后调用 * @param {Collider} other 产生碰撞的另一个碰撞组件 * @param {Collider} self 产生碰撞的自身的碰撞组件 */ onCollisionExit: function (other, self) { console.log('on collision exit'); } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值