【问题标题】:Same jumpheight with changing gravity改变重力时相同的跳高
【发布时间】:2019-11-11 13:40:14
【问题描述】:

我正在尝试重新创建 google-chrome 离线 Dino 游戏。 在这个游戏中,Dino 对自己有一个重力拉动,它有一个跳跃速度,当用户按下空格键时应用向上的速度。

随着时间的推移,障碍物向玩家移动的速度越来越快。 当障碍物移动得更快时,恐龙的跳跃也应该更快。

我试图通过随着时间的推移增加重力来实现更快的跳跃,因此 Dino 被更快地拉下。但是如何让 Dino 跳到相同的高度,比如说,向上 50 像素,不管重力是多少。

我尝试使用以下公式: y = 0.5*a*t^2 + v(0)*t 但我无法得出正确的答案。

此代码工作的画布以左上角为原点(0,0)。因此跳跃速度为负,重力为正。

这段代码在 Dino 类中,其中 this 引用了 Dino。 在 Dino 类的构造函数中,我有代码

this.y = 0;
this.vy = 0;
this.gravity = 1;
this.speed = 0;

在每 x 次调用的更新函数中:

this.speed += 0.001;
this.y += this.vy;
this.vy += this.gravity;
this.gravity += speed*0.001;

跳转功能-按下空格键时执行:

this.vy = (-?);

随着时间的推移,恐龙跳跃的像素数量会越来越高。无论重力如何,我怎样才能让 Dino 每次跳跃相同数量的像素?

【问题讨论】:

    标签: javascript google-chrome height p5.js gravity


    【解决方案1】:

    所以我个人会做一些不同的事情。我会指定一个最大值 y;我们的对象可以跳跃的最高点。然后当玩家点击跳转按钮时,它会Linearly Interpolate 到那个位置,这非常适合你的问题,因为在 p5 他们已经用lerp() 函数宠坏了我们,你可以指定 lerp 的数量,所以游戏越快我们希望玩家跳得越快,所以我们将 lerp 设置得越高。

    为了确定我们使用upSpeed 的速度有多快,您将随着游戏的进行增加:

    const MAX_Y = 150;
    let y = 370;
    
    let upSpeed = 0.1;
    
    function setup() {
      createCanvas(400, 400);
      
    }
    
    function draw() {
      background(220);
      
      fill(255, 100, 100);
      
      y = lerp(y, MAX_Y, upSpeed);
      ellipse(width / 2, y, 50, 50);
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/p5.js"></script>

    然后将您的重力魔法添加到方程式中,您就拥有了自己的游戏!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多