Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 平板碰撞(穿透地面几个像素)_Java_Collision Detection_Game Physics_Gravity - Fatal编程技术网

Java 平板碰撞(穿透地面几个像素)

Java 平板碰撞(穿透地面几个像素),java,collision-detection,game-physics,gravity,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) {

我想做一个平台游戏。我有冲突代码(几乎),但似乎有一个错误。我尝试以下代码:

 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;
        }
    }
for(inti=0;i

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

您似乎正在使用
后验(离散)
碰撞检测。这会使您的对象每次都穿透一点,因为它只有在触摸或穿透时才会激活。您可以考虑将其转换为
先验(连续)
碰撞检测。这样,它就不会穿透地面,因为它会在碰撞前进行检查,然后调整速度或位置以避免穿透

如果你不想摆弄这种类型,你可以添加一个
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;

              }
你需要什么才能使它高于地面=(地面y英尺y);
//我不确定dy是否是地面,所以我添加了第二个布尔比较
如果((dy<4)| |(地面>英尺){
dy+=0.1;//这还不够。应等于:
dy+=你需要什么才能使它在地面上运行;
dy+=如果有其他参数,也考虑它们;
}

香椿的两只脚是否高度相同?这可能是唯一的错误是纯粹的化妆品。x、y和dy的数据类型是什么?有趣的代码位是
if(dy<4)
位。那是干什么的?我不想让dy太高。所以你可以认为4是终点速度。xy和dy是双打。脚的高度是一样的。所以如果
dy
从.1开始,你可以将
dy
增加到4,因为
i
从0增加到
world.ground.size()
?它只会在玩家不与地面相交的情况下增加,所以是的,我同意。好的,那么我如何实现这个先验碰撞检测?一点伪代码会有帮助。只是为
实现添加了一些伪代码,因为我不想取消您的程序