等距瓦片拾取/选择算法
Isometric tile picking / selection algorithm
我正在开发一款等距游戏,但在制作方块选择算法时遇到了问题。
这就是我渲染等距地图的方式:
for (int x = 0; x < 50; x++) {
for (int y = 0; y < 50; y++) {
//Check if tile should be drawn
if (mapdata[x][y] == 1) {
float px = (x - y) * 20;
float py = (x + y) * 20 / 2;
...
window.draw(quad, &tile);
}
}
}
我使用二维数组来存储应该绘制哪些图块。
示例:
int mapdata[5][5]
{
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
}
这就是我目前 'select' 块的方式:
mh = the map tile height, in the above example this would be 5.
w = the width of the isometric tile.
int mouse_grid_y = (((mousey * 2) - ((mh * w) / 2) + mousex) / 2) / w;
int mouse_grid_x = (mousex - mouse_grid_y) / w;
如有任何帮助,我们将不胜感激。
图像澄清:
这是我为游戏教程制作的图像。如您所见,有一个用绿色勾勒出轮廓的方块,这就是我需要算法的目的,我想跟踪鼠标,并在鼠标所在的方块上绘制这个绿色'cursor'。
您可以将屏幕坐标转换为本地系统进行反向计算:
xx = px - basex
yy = py - basey
x' = (xx + 2 * yy) / 40 // integer division to get cell index
y' = (-xx + 2 * yy) / 40
basex
和 basey
是屏幕起点的坐标,其中绘制了单元格 0,0
(您的问题中未提及)
我正在开发一款等距游戏,但在制作方块选择算法时遇到了问题。
这就是我渲染等距地图的方式:
for (int x = 0; x < 50; x++) {
for (int y = 0; y < 50; y++) {
//Check if tile should be drawn
if (mapdata[x][y] == 1) {
float px = (x - y) * 20;
float py = (x + y) * 20 / 2;
...
window.draw(quad, &tile);
}
}
}
我使用二维数组来存储应该绘制哪些图块。 示例:
int mapdata[5][5]
{
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
}
这就是我目前 'select' 块的方式:
mh = the map tile height, in the above example this would be 5.
w = the width of the isometric tile.
int mouse_grid_y = (((mousey * 2) - ((mh * w) / 2) + mousex) / 2) / w;
int mouse_grid_x = (mousex - mouse_grid_y) / w;
如有任何帮助,我们将不胜感激。
图像澄清:
这是我为游戏教程制作的图像。如您所见,有一个用绿色勾勒出轮廓的方块,这就是我需要算法的目的,我想跟踪鼠标,并在鼠标所在的方块上绘制这个绿色'cursor'。
您可以将屏幕坐标转换为本地系统进行反向计算:
xx = px - basex
yy = py - basey
x' = (xx + 2 * yy) / 40 // integer division to get cell index
y' = (-xx + 2 * yy) / 40
basex
和 basey
是屏幕起点的坐标,其中绘制了单元格 0,0
(您的问题中未提及)