【发布时间】:2014-10-07 02:50:27
【问题描述】:
单击等轴测图块时,我需要找到它的坐标。我已经大致弄清楚了。 Y 值返回正确,但显然我的 X 公式不正确,我收到了负值。
展览 A:
灰色瓷砖应该是 0, 0 但由于某种原因我得到 -5...
这是我的代码。
我们在这里制作地图(可能与问题无关,但这里只是为了展示我的工作方式)。 ObjectID 只是一个存储图块类型的枚举。
ObjectID tile_map[][] = new ObjectID[][] {
{ObjectID.Ground_Concrete, ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass},
{ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass},
{ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass},
{ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass},
{ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass, ObjectID.Ground_Grass},
};
我们通过上面的数组循环加载地图并将它们添加到 LinkedList(通过 handler.addObject())存储它们的 x 和 y 值和图块类型,以及它们的宽度和高度。
private void loadMap(ObjectID map[][]) {
int x = offsetX, y = offsetY;
//int tile_width = 128, tile_height = 128;
for(int i = 0; i < map.length; i++) {
for(int j = map[i].length-1; j >= 0; j--) {
handler.addObejct(new objGround(x + (j * map[i][j].getWidth() / 2) + (i * map[i][j].getWidth() / 2), y + (i * map[i][j].getBottomGroundPlane() / 2) - (j * map[i][j].getBottomGroundPlane() / 2), map[i][j]));
}
}
}
我们的鼠标监听器
private class MouseListener extends MouseInputAdapter {
public void mousePressed(MouseEvent e) {
if(!dragging) {
getTileByXY(e.getX(), e.getY());
}
}
public void mouseDragged(MouseEvent e) {
//System.out.println("mosue pressed");
if(SwingUtilities.isRightMouseButton(e)) {
if(e.getX() != mX || e.getY() != mY) {
dragging = true;
if(e.getX() < mX) {
offsetX -= (mX - e.getX());
} else {
offsetX += (e.getX() - mX);
}
if(e.getY() < mY) {
offsetY -= (mY - e.getY());
} else {
offsetY += (e.getY() - mY);
}
mX = e.getX();
mY = e.getY();
//System.out.println("ox: " + offsetX + " oy: " + offsetY);
}
}
}
...
}
最后是我们的 Tile Getter,主要问题在于 htx:
private void getTileByXY(int x, int y) {
int tileW = 127;
int tileH = 63;
x += (tileW * 2);
y += (tileH * 2);
int htx = (int)(((double)(offsetX - x) / (double)tileW) + ((double)(offsetY - y) / (double)tileH) - 0.5);
int hty = (int)(((double)(offsetY - y) / (double)tileH) - ((double)(offsetX - x) / (double)tileW) + 0.5);
System.out.println("htx: " + htx + " hty: " + hty);
}
【问题讨论】:
-
偏移量是从视图一侧到第一个图块的距离吗?您是否尝试过从 x 值中减去偏移量?
-
是的,offset是窗口左侧(offsetX)和顶部(offsetY)的距离。
-
偏移量使用什么值?
-
然后我会考虑从 x 中减去 offsetX,而不是反过来。我认为这就是你的负面价值观的来源。
-
啊好吧!这使它现在从 4 开始。至少我们得到了正数……现在要弄清楚为什么它不是从零开始。
标签: java game-engine isometric