所以我们有一个坐标的正方形区域,
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);
}
答案 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;
}