玩家跌落系统(基本上是重力)

我正在制作一款类似于Doodle Jump的游戏,让你的玩家尽可能高。 现在,我让我的播放器工作,并移动。 但是,问题是,我没有引力,或任何会让玩家再次摔倒在地的东西。 你们有没有想过这样做? 我试着让玩家得到一个恒定的力量,一直被推下来,但是,它不是很平滑,而且它不像真正的摔倒。 我可以帮助制作这个播放器掉落系统吗?

编辑:

GRAVITY = 10; TERMINAL_VELOCITY = 300; vertical_speed = 0; public void fall(){ this.vertical_speed = this.vertical_speed + GRAVITY; if(this.vertical_speed > TERMINAL_VELOCITY){ this.vertical_speed = TERMINAL_VELOCITY; } this.y = this.y - this.vertical_speed; } 

我做了这个,没有用,将我的播放器播放到空中。

在现实世界中,重力将随着时间的推移(每秒9.8米每秒)增加一个恒定量的下降速率。 您可以通过给予玩家垂直速度(当他们跳跃或从平台上掉下来)然后每次围绕主游戏循环从该值中减去一个恒定量来模拟这一点,以便它们随着时间的推移而加速。 你需要对此(最终速度)设置一个最大限制,否则当它们长时间落下时它们可能会很快达到可笑的速度。 伪代码看起来像这样:

 const GRAVITY = 10; const TERMINAL_VELOCITY = 300; object Player { int vertical_speed = 0; int vertical_position; function fall () { this.vertical_speed = this.vertical_speed + GRAVITY; if (this.vertical_speed > TERMINAL_VELOCITY) { this.vertical_speed = TERMINAL_VELOCITY; } this.vertical_position = this.vertical_position - this.vertical_speed; } } 

编辑每秒9.8米每秒是正确的! 请不要编辑它! 加速度是以速度随时间的变化来衡量的,以每秒每秒的米数表示。 每秒9.8米每秒意味着静止物体在1秒后将加速到足以以9.8米/秒的速度行进。 2秒后,它将达到19.6米/秒的速度。 3秒后它将达到29.4米/秒的速度,依此类推。

老实说,我不相信我甚至不得不解释。

你知道引力的公式吗?

 velocity = acceleration * time 

acceleration是重力加速度。

time是已经过去的时间量。

也,

 distance = 1/2 * acceleration * time**2 

在任何给定时间计算具有重力的实体高度的公式如下:

  g * t ^ 2 s(t) = --------- + v * t + h 2 

其中s是时间的函数( timeheight ), g是重力因子(米为9.8), v是原始向上速度, h是原始高度。

而不是让一个恒定的力作用于人,你需要让人在他们跌倒时加速。

它们应该以0速度开始下降。 然后,你应该在它们下降时增加力量。

为此,您需要随时间更新其速度:

像这样的东西:

 if (stillFalling) { velocity = velocity + (gravity_constant) * time_interval; } else { velocity = 0; } 

您将需要不断更新速度。

您将在该网站上找到解释和演示。 我也建议你读一本关于物理学的书或者至少有一些关于引力的维基文章。

根据我的经验,做这样的事情。

 public void run() { if(velY+g>TerminalVel) { velY=TerminalVel; } else { velY+=g; } y+=velY; } 

方法run()应该在循环中。