【问题标题】:mouse coordinates to isometric coordinates鼠标坐标到等轴测坐标
【发布时间】:2014-06-18 05:27:19
【问题描述】:

我正在尝试通过鼠标位置在等距世界中获得正确的图块。

我已经阅读了一些关于此的主题,但它似乎对我不起作用。 基本思想是将正常鼠标坐标重新计算为等距平铺坐标。

如您所见,鼠标光标位于 5/4 的图块上,重新计算错误(选择的图块为 4/5)。这是我的代码:

var params.tx = 100, params.ty=54,
PI = 3.14152,
x1 = x_mouse - params.tx*5,
y1 = y_mouse * -2,
xr = Math.cos(PI/4)*x1 - Math.sin(PI/4)*y1,
yr = Math.sin(PI/4)*x1 + Math.cos(PI/4)*y1,
diag = (params.ty) * Math.sqrt(2),
x2 = parseInt(xr / diag)+1, 
y2 = parseInt(yr * -1 / diag)+1;

图块的原始高度是 54 像素,但如您所见,只有边框图块显示其全高。其余的图块被切割了 4 个像素。

请帮助我 - 可能是我的整个公式都错了。

【问题讨论】:

    标签: javascript coordinates isometric


    【解决方案1】:

    我在大约 5 年前编写的等距库中的代码:

    screenPositionToIsoXY : function(o, w, h){
        var sX   = ((((o.x - this.canvas.xPosition) - this.screenOffsetX) / this.unitWidth ) * 2) >> 0,
            sY   = ((((o.y - this.canvas.yPosition) - this.screenOffsetY) / this.unitHeight) * 2) >> 0,
            isoX = ((sX + sY - this.cols) / 2) >> 0,
            isoY = (((-1 + this.cols) - (sX - sY)) / 2) >> 0;
    
        return $.extend(o, {
            isoX : Math.constrain(isoX, 0, this.cols - (w||0)),
            isoY : Math.constrain(isoY, 0, this.rows - (h||0))
        });
    },
    

    应该是不言自明的。

    【讨论】:

    • 我做对了吗? ox/oy 是我的鼠标坐标,canvas 是我对整个等轴测图的包装,screenOffset 是画布的偏移量,cols/rows 是 x 和 y 方向的瓦片数,unitWidth/unitHeight 是瓦片的宽度/高度和w, h 是画布的宽度/高度?
    • Math.constrain 是我代码中的自定义原型。逻辑很简单:Math.max( 0, Math.min( this.cols - (w||0), isoX ) )。其他一切看起来都不错
    • 也许我做错了什么,但它似乎不起作用。我把我的例子放在这里:pitanik.de/laisla 在第 49 行你会发现你的函数和我的变量。你能看看吗?谢谢...
    • 看起来它正在工作,只是索引关闭了。你要为 X 和 Y 线减去 X,所以修复它。如果它仍然关闭,请尝试交换它们(您的方向可能与我不同)。
    • 可能是一个提示:如果我将此转换应用于画布:rotate(-45deg) scaleX(0.5) translateY(-239px) translateX(-274px) 然后我会看到:pitanik.de/laisla/?tr.. . 对应的变换矩阵是:matrix(0.3535533905932742,-0.35355339059327334, 0.7071067811865467, 0.7071067811865483,-266,-72) - 我应该能够计算点的位置,我试过了,但它不起作用: ( - 我的图块位置不正确吗?
    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 2017-02-05
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多