我正在使用Android的Rect类进行游戏的碰撞检测系统。我有一个问题,程序没有检测到楼层的交叉点。
这里是检测关卡类中的交叉的代码。
public void checkVerticalCollision(Rect rbot, Rect rtop){
if(type != 0){
if(Rect.intersects(rtop, r)){
Log.d("CollisionCheck", "Hit Head");
}
//System.out.println("Bottom Hitbox" + " " + rbot.top + " " + rbot.bottom + " " + rbot.left + " " + rbot.right);
if (Rect.intersects(rbot, r)){
Log.d("CollisionCheck", "Hit Floor");
player.setJumped(false);
player.setSpeedY((byte) 0);
player.setCenterY(tileY - 40);
player.setHealth(player.getHealth() - damage);
}
}
}
public void checkSideCollision(Rect rleft, Rect rright){
if(type != 0 ) {
if(Rect.intersects(rleft,r)) {
System.out.println("in left side intersect");
player.setCenterX(tileX + 88);
player.setSpeedX((byte) 0);
}
if(Rect.intersects(rright,r)) {
System.out.println("in right side intersect");
player.setCenterX(tileX + 10);
player.setSpeedX((byte) 0);
}
}
}
头部,左右撞击箱都可以工作。但是底部的hitbox(rbot)不起作用(因为在intersects中永远不会返回true)。所有矩形变量都以相同的方式声明和设置,并且全部更新。我甚至渲染了hitboxes以检查它是否正在使用其他矩形进行更新。我完全不知道为什么这不起作用。请有人帮忙吗?
感谢。
更新播放器类中的Rect代码:
bottom.set(centerX + 45, centerY + 65, centerX + 20, centerY + 55);
head.set(centerX + 25 , centerY + 12, centerX + 38, centerY + 4);
leftHand.set(centerX + 13, centerY + 42, centerX + 23, centerY + 20);
rightHand.set(centerX + 50, centerY + 42, centerX + 40, centerY + 20);
check.set(centerX - 40, centerY - 40, centerX + 90, centerY +100);
答案 0 :(得分:0)
您似乎错误地设置了矩形bottom
。我假设bottom
的类型为Rect
,在这种情况下set
的参数为set(int left, int top, int right, int bottom)
。
对于bottom
,您已设置left
参数和right
参数,以便left
位于right
的右侧。例如。如果centerX
为100
,则您将左侧设为145
,将右侧设为120
,这是错误的方式。
我认为您需要检查所有left
,right
,top
和bottom
参数是否正确,因为我认为还有其他一些错误太