相同的跳跃高度和不断变化的重力

时间:2019-06-30 16:46:37

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

我正在尝试重新创建google-chrome离线Dino游戏。 在该游戏中,Dino身上有重力牵引力,并且具有跳跃速度,即用户按下空格键时施加的向上速度。

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

我试图通过随着时间的推移增加重力来加快跳跃速度,因此Dino的滑落速度更快。但是无论重力如何,我如何让Dino都跳相同的高度,例如向上50像素。

我尝试使用公式的: y = 0.5 * a * t ^ 2 + v(0)* t 但是我找不到正确的答案。

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

此代码在Dino类中,该类引用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每次跳相同数量的像素?

1 个答案:

答案 0 :(得分:1)

所以我个人会做一些不同的事情。我将指定一个最大值y;我们的物体可以跳到的最高点。然后,当玩家按下跳转按钮时,它将Linearly Interpolate移至该位置,这非常适合您的问题,因为在p5中,他们使用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>

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