坐标 - 看是否给定X,Y在方形区域内,如果没有,找到最近的位置

时间:2013-11-20 20:37:25

标签: java coordinate

所以我们有一个坐标的正方形区域,

bottomX,bottomY,topX,topY,请参阅下面的屏幕截图:

img http://gyazo.com/e23cd17fad3556dcd8ba04daa1f93e50.png

我这样定义:3093, 3528, 3083, 3538

现在,我们要检查玩家的给定X,Y坐标是否在广场内,为此我们这样做:

public boolean inArea(int x, int y) {
    return (x <= getBottomX() && x >= getUpperX() && y >= getBottomY() && y <= getUpperY());
}

inArea(X, Y);

现在,如果玩家不在该区域,我们希望使用他想要去的所选路标的坐标。操纵所以它会找到方形内最近的X,Y。

想象一下,我们有以下方块:

bottomX: -10
bottomY: -10
topX: 10
topY: 10

玩家去了X 13,y -16

系统会将播放器移至:X 10, Y -10

同样,玩家位于3084, 3487,如果他向上移动到3090, 3487,系统会将他移至X 3087 y 3487,因为他离开了Y.

我该怎么做?

这是我的尝试:

            if (pathX >= bottomX && pathX > upperX) {
                    pathX -= (pathX - upperX);
            }   
            if (pathX < bottomX && pathX >= upperX) {
                c.pathX -= (pathX - bottomX);
            }   
            if (pathY >= bottomY && pathY > upperY) {
                pathY -= (pathY - bottomY);
            }   
            if (pathY < bottomY && pathY >= upperY) {
                pathY -= (pathY - upperY);
            }

但它确实不起作用,它的作用是,如果我的Y不在里面,它将会到达右侧底部的角落,它只是不能顺利运行。

我做错了什么?

        Coordinate map = getMap().currentMap;
        int bottomX = map.getBottomX();
        int bottomY = map.getBottomY();
        int upperX = map.getUpperX();
        int upperY = map.getUpperY();
        if (pathX <= bottomX && pathX >= upperX && pathY >= bottomY && pathY <= upperY) {
            walkTo(pathX, pathY);
            return;
        }
        else {

            if (pathX < bottomX) {
                pathX = bottomX;
            } else if (pathX > upperX) {
                pathX = upperX;
            }

            if (pathY < bottomY) {
                pathY = bottomY;
            } else if (pathY > upperY) {
                pathY = upperY;
            }

            walkTo(pathX, pathY);
        }

1 个答案:

答案 0 :(得分:1)

您确定if条款有意义吗?

您正在检查pathX是否等于或大于bottomX并且同时大于upperX。如果后者是真的,那么前者也是正确的,因此前者是一个冗余的检查。

相反,pathX如何既低于bottomX又等于或高于upperX?如果x小于-10并且等于或大于10,那么事情就会变得非常糟糕。

*编辑*

如果您不想让玩家离开该区域,请按照以下步骤操作:

if (pathX > bottomX) {
  pathX = bottomX;
} else if (pathX < upperX) {
  pathX = upperX;
}

if (pathY < bottomY) {
  pathY = bottomY;
} else if (pathY > upperY) {
  pathY = upperY;
}