Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 菱形等距瓷砖拾取_C#_Xna_Tile_Isometric - Fatal编程技术网

C# 菱形等距瓷砖拾取

C# 菱形等距瓷砖拾取,c#,xna,tile,isometric,C#,Xna,Tile,Isometric,我最近将等轴测贴图的显示样式从交错转换为菱形,但我无法理解瓷砖拾取过程 我很清楚关于这个主题的其他现有线索,我阅读了所有这些线索,但我还没有找到解决办法(我这些天的注意力很乱) 我使用的是一个非常基本的系统,它包括穿过所有的瓷砖并选择鼠标指向的瓷砖(类似于Map.Tile.Intersects(mouse.Rect))然后在颜色贴图的帮助下选择正确的瓷砖 但我不喜欢这个系统,因为与我看到的一些数学解相比,它效率很低,而且我不理解 下面是我用来创建地图的代码: int x = 128 * j; i

我最近将等轴测贴图的显示样式从交错转换为菱形,但我无法理解瓷砖拾取过程

我很清楚关于这个主题的其他现有线索,我阅读了所有这些线索,但我还没有找到解决办法(我这些天的注意力很乱)

我使用的是一个非常基本的系统,它包括穿过所有的瓷砖并选择鼠标指向的瓷砖(类似于Map.Tile.Intersects(mouse.Rect))然后在颜色贴图的帮助下选择正确的瓷砖

但我不喜欢这个系统,因为与我看到的一些数学解相比,它效率很低,而且我不理解

下面是我用来创建地图的代码:

int x = 128 * j;
int y = 64 * i;
int isoX = (6 * 64) + (x - y);
int isoY = (x + y) / 2;
128是平铺宽度,64是平铺高度,6*64是xOffset

坐标是这样的:

有人能给我一些提示或解释一下我应该做什么吗?

谢谢。

如果我们将您的公式放入方程组:

isoX = 6 * 64 + 128 * j - 64 * i
isoY = 128 / 2 * j + 64 / 2 * i
i = -1/128 * isoX + 1/64  * isoY + 3
j =  1/256 * isoX + 1/128 * isoY - 3/2
我们可以很容易地反转矩阵并得到方程:

isoX = 6 * 64 + 128 * j - 64 * i
isoY = 128 / 2 * j + 64 / 2 * i
i = -1/128 * isoX + 1/64  * isoY + 3
j =  1/256 * isoX + 1/128 * isoY - 3/2

这个问题一定更适合你。请参阅