所以我们有一个坐标外的正方形区域,
bottomX、bottomY、topX、topY,请参阅下面的屏幕截图,了解我的拍摄方式:
(来源: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/