首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >世界点到等距点-需要帮助理解

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

Stack Overflow用户
提问于 2015-08-23 06:10:09
回答 1查看 200关注 0票数 2

现在我知道这个问题在这个网站和许多其他网站上已经被问过几百次了,但是我找不到一个解释为什么计算有效,以及我如何能够将它改变到我的需要。

这是我目前的职能:

代码语言:javascript
复制
//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;
}

密钥:

代码语言:javascript
复制
        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

我想要输出的样子:

实际输出是什么样子的:

我只是无法理解修改代码的概念,我可能花了很长时间,喝了太多咖啡,但不管我改变了什么,似乎都不像我想的那样奏效。

请随意链接一个详细的教程,它是如何工作的数学,但我找不到任何实际帮助我了解如何修改代码。

提前欢呼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-23 06:55:45

如果你必须把所有的公式组合在一起,

代码语言:javascript
复制
iso_point.x = point.x/scale - (point.y + 1) / (scale / 2);

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

标度/2来源于瓷砖的高度=宽度/2

当您希望iso_point.x随着point.x t.x和point.x t.y的增加而增加时,您会希望类似于

代码语言:javascript
复制
iso_point.x = point.x + (point.y * 2) - half_scale;

同样,iso_point.y必须随着point.x的减少和point.y t.y的增加而增加:

代码语言:javascript
复制
iso_point.y = -point.x + (point.y * 2) - half_scale;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32163735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档