2d - 如何将 x-y 位置转换为等距平铺的平铺 x-y?

标签 2d isometric

我可以根据Drawing Isometric game worlds上的公式绘制我的 map 。但是我怎样才能根据它在 map 层 div 上的位置找到一个图 block 的 x-y 呢?

为了清楚起见,我的图 block 的左侧样式是 1036px,顶部样式是 865px。根据这些CSS属性如何根据 map 找到图 block 的x和y位置?

图 block 宽度为 200,高度为 100。

非常感谢。


我的javascript代码是这样的:

this.drawTiles = function(min_x, max_x, min_y, max_y) {
    if (min_x < 0) min_x = 0;
    if (min_y < 0) min_y = 0;
    if (max_x < 0) max_x = thisObj.MAXSIZE;
    if (max_y < 0) max_y = thisObj.MAXSIZE;
    if (max_x > this.mapSize - 1) max_x = this.mapSize - 1;
    if (max_y > this.mapSize - 1) max_y = this.mapSize - 1;
    if (min_x < this.mapSize - 1) min_x = max_x - thisObj.MAXSIZE;
    if (min_y < this.mapSize - 1) min_y = max_y - thisObj.MAXSIZE;
    var appendLayer = thisObj.maplayer;

    this.capMapDataObj.getTiles(min_x, max_x, min_y, max_y, function(JSONResp) {
        var tiles = JSON.parse(JSONResp);
        for (var x=min_x; x<max_x+1; x++) {
            for (var y=min_y; y<max_y+1; y++) {
                var tile = tiles[x][y];
                var xpos = (y * thisObj.tile_width / 2) + (x * thisObj.tile_width / 2);
                var ypos = (x * thisObj.tile_height / 2) - (y * thisObj.tile_height / 2);
                var zin1 = 100 + parseInt(x) + parseInt(y);
                var elem = '<div style="position:absolute;top:'+ypos+'px;left:'+xpos+'px;z-index:'+zin1+';width:200px;height:200px;background-image:url(images/'+tile[4]+');background-position:bottom;background-repeat:no-repeat;bottom:0px;text-align:center;" id="'+x+'_'+y+'"><div style="padding-top:140px;">'+x+' - '+y+'</div></div>\n';
                if (document.getElementById(x+'_'+y) == undefined)
                    $(elem).appendTo(appendLayer);
            }
        }
    });
}

所以 xpos 和 ypos 变量是每个图 block 层的 css 位置。当我单击 map 图层时,我想计算图 block 的等距 x-y 坐标。

最佳答案

我已经解决了这个问题。

tileX = (yPos / tile_height) + (xPos / tile_width);

tileY = (xPos / tile_width) - (yPos / tile_height);

关于2d - 如何将 x-y 位置转换为等距平铺的平铺 x-y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9658980/

相关文章:

c++ - 如何在单独的视口(viewport)中使用帧缓冲区以及默认帧缓冲区?

C# 二维碰撞检测问题

android - 在 OpenGL-ES 2.0 中渲染多个 2D 图像

javascript - HTML5 Canvas 生成等距图 block

c# - 对于 iso 网格上的瓦片 map 画笔,算法比中点圆更好

javascript - 鼠标位置到等距图 block (包括高度)

android - 查询sqlite数据库并将所选数据存储到二维数组中

java - Unity 2d 游戏中的操纵杆设置

javascript - 有效地获取边界框内的等距网格位置

javascript - 为什么我的线不匹配?