Java游戏编程:平滑跳跃

时间:2015-09-19 13:10:03

标签: java game-physics

在过去一周半的时间里,我一直在用Java和Swing从零开始编写游戏。到目前为止,游戏一直运作顺利,除了一件事:跳跃。我正在尝试实现抛物线跳跃,以便玩家不只是传送一点点。相反,我希望它看起来很逼真。到目前为止我的代码看起来像这样(这只是跳转方法,只要按下空格,W或向上键就调用它):

private void jump(Game game){
    VectorF velocity = new VectorF(0f, 0.1f);       

    int t = 0;

    while(t < 200){
        if(checkTop(game)) break;

        relPos.sub(velocity);
        t++;
    }
}

1 个答案:

答案 0 :(得分:1)

您的游戏应该有game loop

通常,(非常基本的)游戏循环看起来像:

while (playing) {
    accept_input()
    update_game_logic()
    render()
}

update_game_logic()功能中,你会有一个更新玩家位置的部分。玩家的位置更新步骤通常看起来像是以下的混合:

// 1. sum up 'effects' on the player
    // think of 'effects' as velocities that we are adding together
    // is jumping? add (0.0, 0.1), 
    // is holding the right-button? add (0.1, 0.0)
// 2. add a gravity effect (0.0, -0.05)?
// 3. sum up all velocity changes and apply them to the player
// 4. check for any collision and prevent it 
    // (straight up adjusting the position out of the colliding object will do for now, this will also stop you from falling through the floor due to gravity)

因为您根据每个刻度的速度调整玩家的位置,所以您可以继续接受输入并在更新游戏逻辑时渲染屏幕。

编辑:如果你想要一个合适的抛物线弧,上面的'效果'实际上应该是加在一起导致速度变化(通过加速度)然后以更逼真的方式改变位置的力。查看my similar answer here了解详情。