【新手问题】官方教程里为何要使用dt变量?

不明白为何要把accel乘以dt,做不做这个运算有什么不同?

// Player.js
    update: function (dt) {
        // 根据当前加速度方向每帧更新速度
        if (this.accLeft) {
            this.xSpeed -= this.accel * dt;
        } else if (this.accRight) {
            this.xSpeed += this.accel * dt;
        }
        // 限制主角的速度不能超过最大值
        if ( Math.abs(this.xSpeed) > this.maxMoveSpeed ) {
            // if speed reach limit, use max speed with current direction
            this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);
        }

        // 根据当前速度更新主角的位置
        this.node.x += this.xSpeed * dt;
    },

虽然好像没仔细看过这个教程,但是我猜this.accel的单位应该是秒

:sweat_smile: this.accel 这个变量我懂,问题是dt为什么要和他相乘?

个人理解,有错请指正哈。你这样想dt是上一真更新到这一帧过的时间,这个是不固定的,如果不乘的话,那么计算的速度就是固定值,和更新的时间无关,你觉得合理吗(打个夸张的彼方经过1秒,和2秒的速度是同一个值)

确实,打印了一下log,这些是dt的值

以前研究过底层的2dx,好几年了,忘了,大致说下,不对勿喷
update函数一旦启用就会每帧调用,所有的位置更新,动画实现,其实都是根据差值法来算的。
update里面的dt一般情况下你不用管,但是要更新物体的速度就需要使用这个dt,代表每帧时间,帧率不一样,这个dt也不一样。
根据速度公式,v=v。+adt,就是说当前速度=初始速度+加速度dt
每一帧都要去算速度,accel是加速度,所以这样能理解么

1赞

dt是时间啊,不乘不就相当*1,然后认为dt = 1???

this.accel 这个变量是怎么回事?怎么来的?求解

没有仔细看源码,这应该是在计算一个前段为匀加速直线运动后段为匀速直线运动的运动轨迹,所以这个accel是加速度。accel是自己设定的一个值,表示这个player的速度变化值得快慢而已,但是到达一定速度后,速度不在变化。一开始以为使用了微积分,后来发现是一个简单的初中物理问题:sweat_smile:

速度单位是m/s,dt单位是s,accel单位也是s???accel的单位是m/s^2

:sweat_smile:这跟单位没啥关系吧

其实就是一个物理公式 当前速度 = 初始速度 + 加速度 x 时间(单位秒),而dt就是代表两帧之间的时间间隔(代为也是秒)