移动平台碰撞检测
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
但是当我的角色在平台上时,我得到 true
、false
、false
、true
、......
进入你的示例代码,只要输入"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 ));
现在一切正常!
我有一个以恒定速度移动的平台,当我的 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
但是当我的角色在平台上时,我得到 true
、false
、false
、true
、......
进入你的示例代码,只要输入"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 ));
现在一切正常!