3

我正在制作一个类似于 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;
}

我做了这个,没有用,把我的球员射到空中。

4

6 回答 6

9

在现实世界中,随着时间的推移,重力会以恒定的速度增加下落速度(每秒 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 m/s 的速度行进。2 秒后,它将达到 19.6 m/s 的速度。3 秒后,它将达到 29.4 m/s 的速度,以此类推。

老实说,我什至不相信我必须解释这一点。

于 2011-05-24T14:07:11.747 回答
5

你知道重力公式吗?

velocity = acceleration * time

acceleration是重力加速度。

time是已经过去的时间量。

还,

distance = 1/2 * acceleration * time**2
于 2011-05-24T14:02:16.900 回答
2

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

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

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

于 2015-08-24T16:13:58.567 回答
0

与其让一个恒定的力作用在人身上,不如让他们在跌倒时加速。

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

为此,您需要随时间更新它们的速度:

像这样的东西:

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

您将需要不断更新速度。

于 2011-05-24T14:03:26.693 回答
0

你会在那个网站上找到解释和演示。我也建议你阅读一本关于物理学的书,或者至少阅读一些关于重力的维基文章。

于 2011-05-24T14:03:37.927 回答
0

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

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

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

于 2017-08-02T21:08:29.560 回答