【发布时间】:2014-10-24 20:42:21
【问题描述】:
tileWidth 是 64,tileHeight 是 32。
这是我的地图数组:
var map:Array=
[
[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
[2,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],
[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],
[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],
[2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
];
这是它们的放置方式:
//place tiles
for (var i:Number = 0; i < map.length; i++)
{
for (var j:Number = 0; j < map[i].length; j++)
{
placeTile(map[i][j],i,j);
}
}
//place the tile based on coordinates
private function placeTile(id:uint,i:uint,j:uint)
{
var pos:Point=new Point();
pos.x = i;
pos.y = j;
pos = twoDToIso(pos);
tile = new MovieClip(atlas.getTextures(getTile(id)),20);
tile.x = pos.x ;
//tile.y = pos.y + (map.length/2)*tileHeight - tileHeight*4 ;//used to center
tile.y = pos.y;
tile.addEventListener(TouchEvent.TOUCH, mapDown);
mapContainer.addChild(tile);
}
这是用于将二维点绘制成等距的函数:
//CONVERT POINT TO ISOMETRIC
private function twoDToIso(pt:Point):Point
{
trace(" ");
trace("twoDtoIso:");
trace("2d: " + pt);
var tempPt:Point = new Point(0,0);
tempPt.x = (pt.x * tileWidth / 2) + (pt.y * tileWidth / 2);
tempPt.y = (pt.y * tileHeight / 2) - (pt.x * tileHeight / 2);
trace("iso: " + tempPt);
return (tempPt);
}
我可以使用什么公式将单击图块时收到的坐标恢复为二维/访问地图数组?
【问题讨论】:
-
更正您的标签。 “iso”与它无关。 “笛卡尔”与“等距”有点相反。您忘记了 (any) 语言标签。最后,你有什么尝试吗?
-
我尝试了很多。语言不是必需的,因为它只是一个公式。如果我可以从数组索引中检索等轴测坐标,那么我应该能够通过单击访问数组来恢复获得的坐标。 tempPt.x=Math.floor(pt.x/tileHeight); tempPt.y=Math.floor(pt.y/tileHeight);这似乎只在屏幕本身是网格时才有效,而不是等距放置的瓷砖。
标签: actionscript-3 2d isometric cartesian