在过去一周半的时间里,我一直在用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++;
}
}
答案 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了解详情。