转 45度斜角地图菱形坐标转换

关于45度角地图中像素坐标和地图坐标之间的转换,网上有各种方法,其实坐标转换就是计算tite宽和tile高在像素坐标中的偏移值,本方法是针对 tite块原点坐标在菱形的顶点的位置的坐标转换,在45度角地图中,方块形状为菱形,你可以用flash cs工具或其他绘图工具很快的创建出这种菱形方块,按以下3个步骤就可以了:
1、 绘制一个任意大小的正方形;
2、 把这个正方形旋转45度;
3、 把旋转的正方形的高度缩放为原来的50%。
还有一点就是方块尺寸的问题,菱形方块的宽度是高度的2倍,其次方块尺寸比例应该是2:1。例如64像素X 32像素或100像素 X 50像素等,这样的尺寸刚好能使方块在地图铺设的时候很好地排列在屏幕上。
至于坐标间的转换其实大家看图就好理解了:

 

AS3-45度角坐标转换

图中是一个以红色(0,0)位置为原点,红点每向地图坐标系M轴上移动一个单位,原点相对像素坐标系X中的偏移值为:方块宽度/2
菱形方块宽 var tileW :Number;
菱形方块高 var tileH :Number;
地图的行数 var row :int;
地图的列数 var col :int;
红色原点坐标(像素坐标系) var originP : Point;
那么红色的原点坐标在地图坐标系中的位置为:
originP.x = row * tileW /2;
originP.y = 0;
原点坐标出来了,那么其它点的坐标呢?
思路是先求出在地图坐标系下(M方向或N方向)每移动一个单位的像素坐标系X轴和像素坐标系Y轴的像素偏移值。
如红色原点移动到黑色点的位置:
M在像素坐标系X轴的偏移像素 = tileW /2;(向右偏移)
M在像素坐标系Y轴的偏移像素 = tileH /2; (向下偏移)
N在像素坐标系X轴的偏移像素 = - tileW /2;(向左偏移)
N在像素坐标系Y轴的偏移像素 = tileH /2; (向下偏移)
假如有个地图坐标点(M,N),那么它对应的像素坐标系的点为var p:Point
p.x = 原点坐标X + M在像素坐标系X轴的偏移像素 × M + N在像素坐标系X轴的偏移像素 × N = originP.x + tileW /2 × M + (-tileW/2) × N = originP.x + (M – N) × tileW/2;
p.y = 原点坐标Y + M在像素坐标系Y轴的偏移像素 × M + N在像素坐标系Y轴的偏移像素 × N = originP.y + tileH/2 × M + tileH/2 × N = originP.y + (M + N) × tileH/2;

 

原文地址:http://blog.sina.com.cn/s/blog_6807f539010103ce.html

你可能感兴趣的:(转换)