0

私は現在、cocos2dのオブジェクトを使用してアイソメトリックタイルTMXマップにスプライトを追加しようとしています。問題は、TMXオブジェクトからのXおよびYメタデータが、アイソメグリッドXおよびY形式ではなく、標準の2d形式(ピクセルx、ピクセルy)であるということです。通常はタイルサイズで割るだけですが、アイソメ図には何らかの変換が必要です。

たとえば、サイズが40タイル×40タイルの64x32アイソメトリックタイルマップでは、(20,21)の座標にあるオブジェクトは(640,584)として出力されます。

だから問題は本当に(640,584)から(20,21)を得る式は何ですか?

4

2 に答える 2

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;
}
于 2012-05-21T21:31:02.013 に答える
0

ウィキペディアの等角図法の記事は、ここであなたの友達です。数学のセクションで:

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 は、ある角度 alpha (最初の行列)、次に beta (2 番目の行列) を介して a を回転させることによって得られるベクトルです。s = sin(alpha)、c = cos(alpha)、s' = sin(beta)、c' = cos(ベータ)。次に、c を事前に乗算することにより、それを 2 次元に投影します。

vx   | 1 0 0 |  cx
vy = | 0 1 0 |  cy
vz   | 0 0 1 |  cz

これらすべての行列変換を 1 つに組み合わせると、次のようになります。

vx   | c'  0  -s' |  ax
vy = | ss' c  sc' |  ay
vz   | 0   0   0  |  az

変換を数値で取得するには、アルファとベータの独自の値を使用して係数を生成します。

于 2012-05-21T13:50:32.227 に答える