2D 等距引擎 - 数学问题 - 立方体选择 - 菱形图

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

当我创建一个带有

std::vector
的图层并填充
cube
对象(这是我的一类)时,我会计算我的坐标:

for(int J = 0; J < mapSize; J++)
{
    for(int I = 0; I < mapSize; I++)
    {
        x = (J - I) * (cubeSize/2);
        y = (J + I) * (cubeSize/4);

        c = new cube(cubeSize, x, y, z, I, J);
        cs.push_back(*c);
    }
}

我想做这个:

cs[getCubeByID(mouseX, mouseY)].setTexture(...);

使用示例:

I-J [0, 0]
中的立方体在立方体数组中具有
number 0
。如果我
click on 0,0
我得到这个号码。

编辑: 我们在评论中给了我得到 J 或 I 以及一对 x,y 的公式,非常感谢。 我只需要将这对 I-J 转换为我的数组的条目号,就像我给出的示例一样。

我尝试过:

int entry = (J - 1) * size + (I - 1);
,所选的立方体与我想要的立方体相差不远,但仍然不是正确的公式。模运算可以解决我的问题,但我不明白它是如何工作的。

c++ math coordinates isometric
1个回答
1
投票

所以你有

x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);

并且您想从中计算

I
J
(因此索引为
I + J*mapSize
),对吗?这是两个方程的线性系统。

J - I = x * 2 / cubeSize
J + I = y * 4 / cubeSize

I = (y * 2 - x) / cubeSize
J = (y * 2 + x) / cubeSize
© www.soinside.com 2019 - 2024. All rights reserved.