我正在尝试重新创建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每次跳相同数量的像素?
答案 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>
然后将您的重力魔术添加到方程式中,您便拥有了自己的游戏!