我正在JSFiddle上做一个小项目,只是为了好玩。我的灵感来自一个简单的马里奥游戏。但是,我只是在使球前后移动并跳跃。

初始代码正在运行。但是我无法实现的是平滑的跳跃。
可以see here,当您击中空间(使球跳动)并向左移动时,该跳动看起来并不像是真正的物理。它使三角形像跳跃,而不是像半圆一样平滑。我的跳转代码是:

var top = false;
kd.SPACE.up(function () {
    var gravity = 0.3;
    var jump = setInterval(function () {
        cc();
        if (top) {
            y += yv;
            yv -= gravity;
            if (y + r > height) {
                y = height - r;
                clearInterval(jump);
                top = false;
            }
        } else {
            y -= yv;
            yv += gravity;
            if (y < height - 60) {
                top = true;
            }
        }
        circle(x, y, r);
    }, 1000 / 30);
});

最佳答案

通常,如果要针对重力加速度对现实的“跳跃”建模,则应该仅从“跳跃”开始沿最初的向上方向加速。可以通过在第一帧(按空格键时)向y速度添加固定值来建模。此后,只需从每帧的y速度中减去重力即可。

kd.SPACE.up(function () {
    var gravity = 0.3;
    yv -= 8;   // or whatever your jump accel. should be
               // you could also just assign this value to yv which is a different effect
    var jump = setInterval(function() {
        cc();
        if (y + r < height) {
            y += yv;
            yv += gravity;
        } else {
            y = height - r;
            clearInterval(jump);
        }
        circle(x,y,r);
     }, 1000 / 30);
});


这个小提琴或我的浏览器有些奇怪,但是here it is I think.

10-06 12:32