簡體   English   中英

播放器與圖塊之間的碰撞檢測幾乎可以正常工作

[英]Collision Detection between player and tiles almost works

我一直堅持在游戲中進行一些碰撞檢測(有點像Terraria ),但是我編寫了這段代碼,而且……行得通。 如果碰撞在播放器的上方或左側,則有效,但如果碰撞在播放器的右側或下方,而不是反彈,播放器將加速穿過積木,直到有可用空間。 這是我制作的代碼:

private void checkCollision() {
    for(int x = (int) (xpos-1); x <= xpos+1; x++){
        if(x < 0 || x > main.mw-1) continue;

        for(int y = (int) (ypos-2); y <= ypos+1; y++){
            if(y < 0 || y > main.mh-1) continue;

            if(main.map[x][y] == null) continue;
            if(!main.map[x][y].solid) continue;
            if(main.map[x][y].blocktype == -1) continue;

            double distance = Math.sqrt((xpos-x)*(xpos-x) + (ypos-y)*(ypos-y));

            if(distance > 1.0){
                continue;
            }else{

                double x_overlap = Math.max(0, Math.min(xpos + 16, x + 16) - Math.max(xpos, x));
                double y_overlap = Math.max(0, Math.min(ypos + 32, y + 16) - Math.max(ypos, y));
                double overlapArea = x_overlap * y_overlap;

                if(overlapArea > 0){

                    if(x_overlap > y_overlap){
                        yblock += y_overlap/2;
                    }
                    if(x_overlap < y_overlap){
                        xblock += x_overlap/2;
                    }

                    //guessing i need to do something here to make player 
                      go other way if block is on other side
                }
            }
        }
    }
}

因此,如果與他發生碰撞的方塊位於右側或下方,我將如何使玩家反彈。 另外,還有什么方法可以使我更順滑-現在玩家在各處彈跳。 謝謝! :)

您要做的就是跟蹤玩家的位置,如果移動后的位置超出范圍,則可以將玩家的位置重置為位於限制的邊緣。

這就是我處理碰撞檢測的方式,盡管有些人決定拒絕回答,但我回答了另一個與此問題類似的問題。

暫無
暫無

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

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