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

标签 java coordinates

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

bottomX、bottomY、topX、topY,请参阅下面的屏幕截图,了解我的拍摄方式:

img
(来源:gyazo.com)

我是这样定义的: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);
        }

最佳答案

您确定 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;
}

关于java - 坐标 - 查看给定的 X、Y 是否在正方形区域内,如果不在,则找到最近的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106489/

相关文章:

c# - 有没有办法根据坐标获取地名?

android - 如何: plot a given latitude and longitude into still image map using four (4) coordinates of the image?

javascript - NativeScript 中的 ClassNotFoundException 使用 .extend()

java - 使用 Java 通过 HTTP 发送文件内容

java - 为了保留引用而将嵌套类声明为非静态?

java - SharedPreferences 在某些设备上提供默认值

c++ - Allegro,输出鼠标点击

java - 抛出异常时,错误消息是如何初始化的?

java - 在 JMapViewer 中使用 mouseClicked 方法不会更新 getPosition 返回值

python - 20 x 20 block 数组中的坐标对列表