移动平台碰撞检测

Moving platform collision detection

我有一个以恒定速度移动的平台,当我的 olayer 跳到该平台上时,我需要更新我的玩家位置。但是我在碰撞检测方面遇到了问题。下面是我如何尝试检测我的播放器底部矩形和平台矩形之间的碰撞。

    for(GameObject t2 : list){
                    if(t2 instanceof Platform){

                        platform = (Platform) t2;
                        render.rect(platform.getHitBox().getX(), 
                                    platform.getHitBox().getY(),
                                    platform.getHitBox().getWidth(),
                                    platform.getHitBox().getHeight());

                        platform.update(Gdx.graphics.getDeltaTime(), 0,
                                        player1.getHitBox().getX(), 
                                        Gdx.graphics.getWidth());

                        if(platform.getHitBox().overlaps(player1.getHitBox())
                           ||player1.getHitBox().overlaps(platform.getHitBox())){

                            System.out.println("true");

                            platformPositonX = player1.getHitBox().getX() 
                                              + platform.getUpdateSpeed();

                            player1.action2(1, platformPositonX, 
                                           (platform.getHitBox().y +
                                           platform.getHitBox().height));

                        }else{
                            System.out.println("false");
                        }
                    }
}

这是我的打印屏幕和在 concole 中打印的结果 如您所见,我的碰撞无法正常工作。当我的角色不在平台上时,我的结果是正确的,我得到 false 但是当我的角色在平台上时,我得到 truefalsefalsetrue、......

进入你的示例代码,只要输入"false"println,如果不重叠,touched是真的,我不知道这种情况下"touched"是什么,但如果你只想输入如果重叠是假的,你的屁股是这样的:

在您的代码中说:

..// other code

    }else if(touched){
            System.out.println("false");
    }
}

对此进行更改:

..// other code

    }else{
            System.out.println("false");
    }
}

您可能也有兴趣看看这个:

Libgdx - Get Intersection Rectangle from Rectangle.overlap(Rectangle)

终于发现问题所在了。在这一行我需要减去一个数字

 player1.action2(1, platformPositonX,(platform.getHitBox().y + platform.getHitBox().height - 5 ));

现在一切正常!