Cocos Creator 学习笔记(四)—— 刚体移动

接上文,设置好人物以及地面的刚体后,下一步是让人物动起来。

设置键盘监听:

        // 设置键盘监听
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyPressed, this);
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyReleased, this);

获取节点上的刚体组件:

        // 获得节点上的刚体组件
        this.heroRigidBody = this.node.getComponent(cc.RigidBody);

当键盘按下时:

    onKeyPressed: function(event) {
        let keyCode = event.keyCode;
        if (this.state != STATE.DEAD)
        {
            switch(keyCode) {
                // 向左走
                case cc.macro.KEY.a:
                    this.direction = -1;
                    break;
                // 向右走
                case cc.macro.KEY.d:
                    this.direction = 1;
                    break;
            }
        }
    },

当键盘弹起时:

    onKeyReleased: function (event) {
        let keyCode = event.keyCode;
        if (this.state != STATE.DEAD)
        {
            switch(keyCode) {
                case cc.macro.KEY.a:
                case cc.macro.KEY.d:
                    this.direction = 0;
                    break;
            }    
        }
    },

通过以上步骤设置好人物移动的flag后,在update中进行判定:

update (dt) {
    // 如果没有按下左键或者右键
    if (this.direction != 0) {
        this.on_player_walk(this.direction);
    }
},

on_player_walk这个函数如下:

MOVE_SPEED需要在参数列表中定义,大小需要根据刚体的gravity(重力)、Friction(摩擦力)自行调整,一般在100~500之间比较合适。

    on_player_walk: function(dir) {

        // 取得之前获得的刚体组件的线速度
        var v = this.heroRigidBody.linearVelocity;

        // 改变其x方向的速度
        v.x = this.MOVE_SPEED * dir;

        // 将改变后的线速度赋值回去
        this.heroRigidBody.linearVelocity = v;

        // 这里是为了改变人物的面部朝向
        this.node.scaleX = -dir;
    },

值得注意的是,刚体不会受到setPosition()的影响,所以需要通过改变刚体的速度方式来移动。

除此之外,还可以使用cc.moveTo,cc.moveBy,cc.place等进行移动。

 

推荐一篇文章,该文章中详细说明了ccc的物理引擎以及碰撞回调,值得阅读:

https://www.write-bug.com/article/1807.html

 

此处你的人物应该可以进行左右移动了,下面我们让他能够跳跃:

在上述 的onKeyPressed中加入下面这几行代码:

 

on_player_jump 如下:

和人物的移动类似,此处我们改变刚体y方向的速度,jumpHeight参数也需要自行在参数列表中定义,大小需要随着gravity的改变而改变(重力越大,下落越快,跳的也更低),一般在500~1000

 

本篇文章中用到的代码参考了B站某教学视频(忘记是哪个了,如果需要加上出处,请联系我)。

希望大佬们多多留言,你们的留言是我写作的动力!

你可能感兴趣的:(Cocos Creator 学习笔记(四)—— 刚体移动)