2D isometric engine - 数学题 - 立方体选择 - 菱形图
2D isometric engine - Math problems - Cube selection - diamond shape map
我在创建一个带有 std::vector
的图层时计算我的坐标,其中填充了 cube
个对象(这是我的 class):
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
我得到这个号码。
编辑:
我们在评论中给了我用一对 x,y 得到 J 或 I 的公式,非常感谢。 我只需要将这对I-J像我举的例子那样转换成我数组的入口号就可以了
我试过了:int entry = (J - 1) * size + (I - 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
我在创建一个带有 std::vector
的图层时计算我的坐标,其中填充了 cube
个对象(这是我的 class):
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
我得到这个号码。
编辑: 我们在评论中给了我用一对 x,y 得到 J 或 I 的公式,非常感谢。 我只需要将这对I-J像我举的例子那样转换成我数组的入口号就可以了
我试过了:int entry = (J - 1) * size + (I - 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