javascript - 制作更流畅的跳跃动画

标签 javascript animation canvas drawing html5-canvas

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

初始代码正在运行。但我无法实现的是更平滑的跳跃。 尽你所能see here ,当您按下空格键(使球跳跃)并向左移动时,跳跃看起来不像是真实的物理现象。它使三 Angular 形像跳跃一样,而不是在半圆类型的运动中变得平滑。我的跳转代码是:

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);
});

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

关于javascript - 制作更流畅的跳跃动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820528/

相关文章:

Javascript 函数 draw() 形状到图像

javascript - 从 HTML 外部打开模态

javascript - 无法使用 bootstrap 和 jquery 获取模态显示

android - 启动画面中的逐帧动画 - Android 2.1

wpf - 在WPF中使用动画改变窗口大小

javascript - 未捕获的类型错误 : Type error with drawImage

javascript - D3js 选择所有文本

javascript - 不建议在 ES6 中使用 "use strict"?

java - FragmentTransaction 动画 - 在退出 fragment 上方显示进入 fragment

canvas - 有没有办法在 rxjs 中处理带有可观察值的 canvas.toBlob ?