CocosCreator之KUOKUO带你做个加速带!起飞!

摘要

有趣的物理小游戏总能让小伙伴们爱不释手,而 CocosCreator 的内置物理引擎让其开发变得更加简单。今天 KUOKUO 就做为大家带来物理的加速带,让主角小恐龙起飞!

正文

使用版本

  • CocosCreator 版本 2.1.3

最终效果


物理系统

在 CocosCreator 中有两套碰撞系统,不是 Physic 开头的就不是物理碰撞,通常用来做简单的碰撞检测。若我们想构建物理世界,那就要用刚体和物理碰撞组件了。最常用的:RigidBody + PhysicsBoxCollider。

还需在 onLoad() 方法中开启物理引擎:

cc.director.getPhysicsManager().enabled = true;

物理碰撞

在勾选开启物理监听后,物理碰撞发生后会触发该刚体节点上绑定脚本中的碰撞回调。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBE0NW0j-1581684893655)(http://cdn.kuokuo666.com/20200214/tt1.png)]

我们在碰撞物体上绑定脚本写下这几个回调方法,在发生碰撞后会依次的触发。

cc.Class({
    extends: cc.Component,

    properties: {
    },

    // 只在两个碰撞体开始接触时被调用一次
    onBeginContact: function (contact, selfCollider, otherCollider) {

    },

    // 只在两个碰撞体结束接触时被调用一次
    onEndContact: function (contact, selfCollider, otherCollider) {

    },

    // 每次将要处理碰撞体接触逻辑时被调用
    onPreSolve: function (contact, selfCollider, otherCollider) {

    },

    // 每次处理完碰撞体接触逻辑时被调用
    onPostSolve: function (contact, selfCollider, otherCollider) {

    }

});

加速的实现

首先,我们要明白那 3 个参数的意义,尤其是 contact 最为重要。selfCollider 和 otherCollider 很容易理解,selfCollider 指的是自身节点上的碰撞体,ohterCollider 指的是发生碰撞的另一个碰撞体。那么这个 contact 是什么呢?它包含碰撞的信息,比如碰撞的位置和法向量,类型是 cc.PhysicsContact。我们怎么使用它呢?如图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbSgy6N9-1581684893656)(http://cdn.kuokuo666.com/20200214/tt3.png)]

加速的实现就是调用了设置切线速度的API。注意要在 onPreSolve 中,在处理信息之前。

onPreSolve: function (contact, selfCollider, otherCollider) {
    contact.setTangentSpeed(1500);
},

不同地形实现

除了加速,我们还可以设置摩擦力,比如我们有两种地形,冰雪路面和沼泽地形。

// 冰雪
contact.setFriction(0.25);
// 沼泽
contact.setFriction(0.85);

物理系统常见问题

  • 不在 onLoad 中开启物理系统,而是在 start 中开启,无效的!
  • 未设置碰撞分组,无效果。
  • 带有刚体的物理节点,位置不受父节点影响的。
  • 更新了物理碰撞盒的属性没生效?因为没调用 apply() 方法!或者在组件 enabled 为 false 时改变。
  • 勾选了 sensor 可就没碰撞效果了。
  • 如果你使用了物理系统,就最好通过力来运动物体了,除非是 Static 或者 Animated 再直接改变属性。
  • Rigidbody 有个 getLinearVelocityFromWorldPoint() 方法可以得到线速度,通过方向你就知道主角是用头顶的方块还是用脚踩的。
  • 修改全局重力 cc.director.getPhysicsManager().gravity = cc.v2(0, 0);
  • 如果手机太卡,记得把物理刷新频率从 60 降为 30。

结语

有意思吧!我们下篇文章讲讲射线检测。

O(∩_∩)O~~

微信公众号

发布了124 篇原创文章 · 获赞 137 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/kuokuo666/article/details/104319312