簡體   English   中英

播放器與圖塊之間的碰撞檢測(2D)

[英]Collision detection between player and tiles (2D)

我一直在開發2D游戲,有點像Terraria ,並且我已經准備好進行碰撞檢測。 我自己嘗試過,但是...很奇怪。 我想知道是否有人可以幫助我。 我將所有塊存儲在2D數組中:

Block[][] map = new Block[mw][mh];

其中mw是地圖寬度, mh是地圖高度(以塊數表示)。 每個Block都是顯示為16x16像素的圖像。 這是我嘗試過的,我知道這是錯誤的,但我真的不知道我需要做什么。

private void checkCollision() {

    for(int x = -1; x <= 1; x++){
        for(int y = -1; y <= 2; y++){
            Rectangle obj = new Rectangle((int)Block.getXOnScreen(xblock+x), (int)Block.getYOnScreen(yblock+y), 16, 16);
            try{
                if(main.map[(int) (xblock+x)][(int) (yblock+y)].solid && obj.intersects(bounds()){
                    if(y <= -1 && velY > 0){
                        velY = 0;
                        System.out.println("Collision below");
                        onground = true;
                    }else if(y >= 2 && velY < 0){
                        velY = 0;
                        System.out.println("Collision above");
                    }
                    if(x <= -1 && velX < 0){
                        velX = 0;
                        System.out.println("Collision left");
                    }else if(x >= 1 && velX > 0){
                        velX = 0;
                        System.out.println("Collision right");
                    }
                }
            }catch(Exception e){}
        }
    }
}

我每次打勾時都會調用此方法,但是它不會與任何東西發生碰撞,因此玩家只是掉下來了。

public void tick(){
    xblock += velX;
    yblock += velY;
    velY += gravity;

    checkCollision();
} 

如果有人知道如何有效地進行碰撞檢測,請與我分享。 謝謝! :)

基於我曾經編寫的少數JavaFX / Swing應用程序,要檢測碰撞的方法是始終跟蹤對象的位置,並在對象移動時檢查其是否為新位置(舊+移動計數)為不超過地圖的限制。 如果是這樣,您希望將其位置重置為正確的極限,以便它可以沿所有其他有效方向運行。 如果您繼續嘗試超出限制,那么它應該繼續重置您的頭寸。

因此,假設頁面的限制是500像素寬,您位於495位置,每次移動為10,那么下次移動時您將位於505位置,因此顯然超出了范圍。 因此,您運行了一個if(currentPosition> limit){將位置重置為限制},從而將currentPosition設置為500,這恰好在邊界上並且在限制之內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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