相同的跳跃高度改变重力

Same jumpheight with changing gravity

我正在尝试重新创建 google-chrome 离线恐龙游戏。 在这个游戏中,Dino 自身有重力,它有一个跳跃速度,当用户按下 space 条时应用向上的速度。

随着时间的推移,障碍物越来越快地移动到玩家身边。 当障碍物移动得更快时,Dino 的跳跃也应该更快。

我试图通过随时间增加重力来加快跳跃速度,因此 Dino 被拉得更快。但是,无论重力如何,如何让 Dino 跳跃相同的高度,比方说,向上 50 像素。

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

canvas这段代码以左上角为原点(0,0)。所以跳跃速度为负,重力为正

此代码在 Dino 内部 class,其中 this 引用了 Dino。 在 Dino class 的构造函数中,我有代码

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;

跳转功能-在按下space栏时执行:

this.vy = (-?);

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

所以我个人会做一些不同的事情。我会指定最大 y;我们的物体可以跳跃的最高点。然后,当玩家按下跳跃按钮时,它会 Linearly Interpolate to that position, this works perfectly for your problem as in p5 they've spoiled us with a lerp() 函数,您可以在其中指定 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>

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