[CocosCreator]射线检测

射线检测属于物理系统大类中的小类,Cocos的物理系统使用的是Box2D
射线检测建议大家先扫一下CocosCreator的官方文档
同时,@wangwenbo有个文章写的很细,算是对官方文档的补充。

以下为笔者在使用过程中遇到的坑,希望能帮到你。
1,物理系统需要在onLoad()中开启。

    onLoad() {
        cc.director.getPhysicsManager().enabled = true;
    }

若不开启,使用射线检测的函数时会报Init()错误。只能在onLoad()方法中开启,若在start()方法中开启,虽然不报错了,但是检测不到射线碰撞。

2,射线检测的坐标都需要统一转换为世界坐标。

3,物理组件、碰撞组件,傻傻不不清楚。
笔者曾经患个错误,为一个Sprite加了碰撞组件->Box Collider,也加了RigidBody。但是搞死检测不到射线。
后来才发现,组件加错了。应该是物理组件->Collider->Box。添加了该Box组件后,还会自动添加其依赖的RigidBody组件。刚体自带重力,为防止下落可以设置Gravity Scale为0。
Cocos论坛上这个兄弟我估计就是这个原因导致的。

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'); } });
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值