平台碰撞(穿透几个像素)

时间:2012-09-02 13:57:02

标签: java collision-detection game-physics gravity

我正在尝试制作平台游戏。我有碰撞代码(几乎),但似乎有一个错误。我试试这段代码:

 for (int i = 0; i < world.ground.size(); i++) {
        if (!world.ground.get(i).intersects((int) x, (int) y, player_width, player_height + (int) dy)) {
            y += dy;
            if (dy < 4) {
                dy += 0.1;
            }
        } else {
            dy = 0;
            jumped = false;
        }
    }

但有时我的角色的脚会穿过地面2或3像素。有一个更好的方法吗?请帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

您似乎正在使用posteriori (discrete)碰撞检测。这会导致您的物体每次都穿透一点,因为它只有在被触摸或穿透时才会激活。您可以考虑将其转换为priori (continuous)碰撞检测。这样,它永远不会穿透地面,因为它会在碰撞前进行检查,然后调整速度或位置,以避免穿透。

如果你不想摆弄这种类型,你可以添加一个在绘画前起作用的correction函数。

void foo()
{
      //check if below ground
      //if yes, displecement upwards until it is above enough
      //now you can paint
      //return
}

我看到你实现了这个:

  what_you_need_to_make_it_above_ground=(ground_y-feet_y);


  //im not sure if dy is ground level so i added second boolean compare

  if ((dy < 4)||(ground_y>feet_y)) {
                 dy += 0.1; // this isnt enough. should be equal to:
                 dy +=what_you_need_to_make_it_above_ground;
                 dy +=if_there_are_other_parameters_think_of_them_too;

              }