我正在尝试使用cocos2d中的Objects将sprite添加到等距Tiled TMX地图中。问题是来自TMX对象的X和Y元数据是标准的2d格式(像素x,像素y),而不是等距网格X和Y格式。通常你只需将它们除以图块大小,但是等长需要某种变换。
例如,在尺寸为40的64x32等距瓷砖地图上,按40个瓷砖,(20,21)坐标处的对象显示为(640,584)
所以问题真的是公式从(640,584)获得(20,21)?
答案 0 :(得分:1)
直接来自cocos2d的CCTMXLayer源代码:
-(CGPoint) positionForIsoAt:(CGPoint)pos
{
CGPoint xy = {
mapTileSize_.width /2 * ( layerSize_.width + pos.x - pos.y - 1),
mapTileSize_.height /2 * (( layerSize_.height * 2 - pos.x - pos.y) - 2),
};
return xy;
}
答案 1 :(得分:0)
Wikipedia's isometric projection article是你的朋友。在数学部分:
cx | 1 0 0 | | c' 0 -s' | ax
cy = | 0 c s | | 0 1 0 | ay
cz | 0 -s c | | s' 0 c' | az
其中c是通过旋转一个角α(第一个矩阵)然后β(第二个矩阵)得到的矢量,s = sin(alpha),c = cos(alpha),s'= sin(beta) ,c'= cos(beta)。然后通过预乘c:
将其投影到2dvx | 1 0 0 | cx
vy = | 0 1 0 | cy
vz | 0 0 1 | cz
将所有这些矩阵变换合并为一个:
vx | c' 0 -s' | ax
vy = | ss' c sc' | ay
vz | 0 0 0 | az
要获得数字变换,请使用您自己的alpha和beta值来生成系数。