等距选择块/选择算法

问题描述 投票:2回答:1

我工作的一个等距游戏,难以作出一个片选择算法。

这是我如何使我的等距tilemap的:

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,
}

这是我目前“选择”砖:

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;

任何帮助将不胜感激。

图片澄清:

这是我为我的游戏教程制作的图像。正如你可以看到有绿色列出一个瓦,这正是我所需要的算法,我要跟踪鼠标,并绘制这个绿色的“光标”在这里的鼠标是瓷砖。

c algorithm math isometric
1个回答
1
投票

您可以将屏幕坐标到本地系统中进行反向计算:

xx = px - basex
yy = py - basey
x' = (xx + 2 * yy) / 40   // integer division to get cell index
y' = (-xx  + 2 * yy) / 40

basexbasey是在您的屏幕,电池0,0绘制(在你的问题没有提及)的起点坐标

© www.soinside.com 2019 - 2024. All rights reserved.