Java 坐标-查看给定的X,Y是否在正方形区域内,如果不在,则找到最近的位置

Java 坐标-查看给定的X,Y是否在正方形区域内,如果不在,则找到最近的位置,java,coordinates,Java,Coordinates,所以我们有一个平方面积的坐标 bottomX,bottomY,topX,topY,请看下面的截图,我是如何拍摄的: (来源:) 我这样定义它:3093352833538 现在,我们要检查玩家给定的X,Y坐标是否在正方形内,为此,我们要执行以下操作: public boolean inArea(int x, int y) { return (x <= getBottomX() && x >= getUpperX() && y >= get

所以我们有一个平方面积的坐标

bottomX,bottomY,topX,topY,请看下面的截图,我是如何拍摄的:


(来源:)

我这样定义它:
3093352833538

现在,我们要检查玩家给定的X,Y坐标是否在正方形内,为此,我们要执行以下操作:

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

inArea(X, Y);
球员去了X13,y-16

系统将把播放器移动到:
x10,Y-10

同样,玩家位于
30843487
,如果他移动到
30903487
,系统会将他移动到
x3087y3487
,因为他离开了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);
            }
if(pathX>=bottomX&&pathX>upperX){
pathX-=(pathX-upperX);
}   
如果(路径x=upperX){
c、 pathX-=(pathX-bottomX);
}   
如果(pathY>=底部和&pathY>上部){
pathY-=(pathY-底部);
}   
如果(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);
        }
Coordinate map=getMap().currentMap;
int bottomX=map.getBottomX();
int bottomY=map.getBottomY();
int upperX=map.getUpperX();
int upperY=map.getUpperY();
如果(路径x=upperX&&pathY>=bottomY&&pathY upperX){
pathX=upperX;
}
如果(底部){
帕蒂=底部;
}否则如果(pathY>upperY){
pathY=upperY;
}
walkTo(pathX,pathY);
}

您确定
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;
}
if(路径x>bottomX){
pathX=底部x;
}else if(路径xupperY){
pathY=upperY;
}

Y:3487甚至不靠近给定的盒子,所以如果玩家移动到Y:3490,他实际上是在靠近盒子,所以这不应该被允许吗?@t0mppa不,在3487上方,它只是离开该区域。看到了吗,但3487实际上比区域低41点,所以他没有离开,而是朝着它走?等等,我出了个意外,我的意思是3087到3090=向外,不是Y坐标,我修正了。Y坐标仍然在区域外,而3087和3090都在区域内,所以这也没有意义。类似于:30833530->30833525的东西会有意义。阅读我的编辑,现在可能更有意义了,因为我不小心在示例中显示了Y而不是X。我在谈论你文章末尾的代码片段,其中有四个
if
子句。哦,不,我不是很确定if子句,我只是尝试了一些东西。基本上,如果我走到山顶,它会带我到右上角,如果我走到右边,它会带我到左边。我再举一个可能更清楚的例子:我站在X 3088 Y 3486,我走到3088 3488,系统会把我带回到3088 3487,但你的代码会把我带到3090,3487看到最新的编辑,因为名字的缘故,我把X搞错了。
if (pathX > bottomX) {
  pathX = bottomX;
} else if (pathX < upperX) {
  pathX = upperX;
}

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