[英]Android Rect Intersect not working
我正在為使用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)不起作用(因為相交永遠不會返回true)。 所有矩形變量都以相同的方式聲明和設置,並且全部更新。 我什至渲染了復選框,以檢查它是否正在與其他矩形一起更新。 我非常困惑為什么這行不通。 請有人幫忙嗎?
謝謝。
更新播放器類中的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);
您似乎在錯誤地設置了矩形bottom
。 我假設bottom
是Rect
類型,在這種情況下要set
的參數是set(int left, int top, int right, int bottom)
。
對於bottom
,您已設置了left
參數和right
參數,以使left
在right的right
。 例如,如果centerX
為100
,則將left設置為145
,將right設置為120
,這是錯誤的方法。
我認為您需要檢查所有的left
, right
, top
和bottom
參數是否正確,因為我認為還有其他一些錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.