[英]Order of Collision in 2D Game Development
我被困在2D類Mario游戲中有關碰撞的錯誤中。
public void collision() {
if (Rect.intersects(Robot.rect2, r)){
robot.setSpeedY(0);
robot.setCenterY(tileY - 32);
robot.setJumped(false);
} else if (Rect.intersects(Robot.rect, r)){
robot.setSpeedY(0);
robot.setCenterY(tileY + 32);
}
updateRect();
if (Rect.intersects(Robot.rect3, r)){
robot.setCenterX(tileX + 32);
robot.setSpeedX(0);
} else if (Rect.intersects(Robot.rect4, r)){
robot.setCenterX(tileX - 32);
robot.setSpeedX(0);
}
}
我的游戲中的碰撞是通過比較矩形來檢查的。 我的機器人的矩形:rect(底部碰撞,所以矩形位於我的機器人精靈的下半部分),rect2(頂部碰撞),rect3(左側碰撞)和rect4(右側碰撞)。
我游戲中的每個圖塊都以實例化的矩形r為邊界。 當我的機器人的矩形和圖塊的矩形相交時,我會調用沖撞()來設置我的機器人方向的位置。
這是我的問題:如果我的機器人在拐角處,即發生底部碰撞和向右碰撞,而我向右移動,則機器人將移入右側瓷磚,這將觸發底部碰撞,並擰緊所有物體。
切換“底部” /“頂部”和“右側” /“左側”碰撞的位置並沒有幫助,因為這樣會發生相同的問題,即機器人掉入地面,觸發“右側” /“左側”碰撞。
本質上,我需要一種同時運行所有四個程序的方法。 謝謝
Yku正在嘗試一次構建一個檢查。 為什么不這樣
if(!Rect.intersects(robot.rect1) && !Rect.intersects(robot.rect2) && !Rect.intersects(robot.rect3) && !Rect.intersects(robot.rect4)
{
//act normally
} else {
//collieion
}
您現在正在做的是檢查一側並在此基礎上得出結果。
是的,我也遇到了麻煩,您缺少的是調用updateRect();。 在X軸上進行碰撞檢測后,再次輸入。 我建議先檢查X軸。 這是一篇有關基於拼貼的碰撞的不錯的文章: http : //higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.