我有一个恒定速度的移动平台,当我的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
,......
答案 0 :(得分:1)
最后我发现了什么是错的。在这一行中,我需要减去一个数字
player1.action2(1, platformPositonX,(platform.getHitBox().y + platform.getHitBox().height - 5 ));
现在一切正常!
答案 1 :(得分:0)
进入示例代码,只需输入" false" println,如果不重叠,触摸是真的,我不知道是什么"触及"在这种情况下,但是如果你想进入的话,只有当ovelaping是假的,你的伙伴就会证明:
代码中的表示:
..// other code
}else if(touched){
System.out.println("false");
}
}
为此改变:
..// other code
}else{
System.out.println("false");
}
}
您可能也有兴趣看一下:
Libgdx - Get Intersection Rectangle from Rectangle.overlap(Rectangle)