播放器和磁贴之间的碰撞检测几乎可以工作

时间:2015-07-17 16:06:59

标签: java collision-detection

我一直坚持在我的游戏中进行一些碰撞检测(有点像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
                }
            }
        }
    }
}

那么,如果他正在碰撞的棋盘位于右侧或下方,我将如何让玩家反弹。还有什么方法可以让这个更顺畅 - 现在玩家可以在这个地方弹跳。谢谢! :)

1 个答案:

答案 0 :(得分:0)

您要做的是跟踪玩家的位置,如果移动后的位置超出范围,您可以将玩家的位置重置为限制边缘。

我是如何处理碰撞检测的,我回答了另一个类似于这个问题的问题,尽管有些人决定对这个问题进行回答。