gpt4 book ai didi

c# - 世界点到等距点 - 需要帮助理解

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:25 25 4
gpt4 key购买 nike

现在我知道这个问题已经在这个网站和许多其他网站上被问和回答了数百次,但我找不到关于为什么计算有效的解释,以及我如何实际改变它以满足我的需要。

这是我当前的功能:

//Converts X, Y from the 2D World to a Point in the Isometric Grid
public static Vector2 WorldToIsometric(float x, float y, int scale)
{
Vector2 point = new Vector2(x, y);
Vector2 iso_point = new Vector2(point.x, point.y);
float half_scale = scale / 2;

iso_point.x = point.x - (point.y * 2) + half_scale;
iso_point.y = point.x + (point.y * 2) - half_scale;

iso_point.x /= scale;
iso_point.y /= scale;

iso_point.x = Mathf.Floor (iso_point.x);
iso_point.y = Mathf.Floor (iso_point.y);

return iso_point;
}

键:

        x  =  mouse x in world
y = mouse y in world
scale = width of isometric tile
point = mouse point in world
iso_point = mouse point on isometric grid

我希望输出看起来像什么:

enter image description here

实际输出是什么样的:

enter image description here

我只是无法理解更改代码的概念,我可能已经花了很长时间并且喝了太多咖啡,但是无论我更改什么,它似乎都不像我想的那样有效会的。

请随意链接一个详细的教程,说明它在数学上是如何工作的,但我找不到任何能真正帮助我理解如何更改代码的东西。

提前干杯

最佳答案

如果你必须把整个公式放在一起,

iso_point.x = point.x/scale - (point.y + 1) / (scale / 2);

在您的例子中,当您将鼠标向右移动时,point.x/scale 会增加 X。如果将鼠标向上移动,可以看到 iso_point.x 将减少 point.y/(scale/2)。

scale/2 来自于 tile 的 height = width/2 这一事实

当您希望 iso_point.x 随着 point.x 和 point.y 的增加而增加时,您需要像这样的东西

iso_point.x = point.x + (point.y * 2) - half_scale;

以同样的方式,iso_point.y 必须随着 point.x 的减小和 point.y 的增加而增加:

iso_point.y = -point.x + (point.y * 2) - half_scale;

关于c# - 世界点到等距点 - 需要帮助理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com