簡體   English   中英

二維游戲開發中的碰撞順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM