0

各スプライトのアンカーポイントをスプライトの中心(つまり0.5f、0.5f)に設定して、CCTMXLayerにpositionAtメソッドを使用すると、実際にはタイルの中央にCGPointが返されるようにする方法はありますか?

ポイントにxタイルサイズの半分とyタイルサイズの半分を追加することで、手動で実行できることを認識しています(これは、今のところ実行します)が、任意の場所に設定できるかどうかを知りたいです。彼らのAPIとの方法。

私が試したのは、各スプライトを調べて、アンカーポイントを0.5,0.5に設定することです。

for (int i = 0; i < [layer layerSize].width; i++){
   for (int j = 0; j < [layer layerSize].height; j++){
      [[hey tileAt:ccp(i,j)] setAnchorPoint:ccp(0.5f, 0.5f)];
   }
}

これ(obvs)は、すべてのタイルスプライトのアンカーポイントを変更しましたが、positionAtを使用して位置を取得すると、アンカーポイント0,0が引き続き考慮されます。

繰り返しになりますが、この問題を回避して、各タイルの独自の中心点を計算することはできますが、それなしでこれを実行できるかどうかを知りたいと思います。

簡単な修正は次のようになります。

CCTMXLayer *layer = [map layerNamed:@...];

-(CGPoint) positionAtFix: (float) x :(float) y {
   CGPoint *abc = ccp([layer positionAt:ccp(x,y)] + [map tileSize].width / 2 ,
                              [layer positionAt:ccp(x,y)] + [map tileSize].height / 2 );
   return abc;
}

ありがとう !

4

1 に答える 1

0

CCTMXTiledMapソースコードを変更しないと不可能です。これは、anchorPointが0,0のタイルをレンダリングするために特別に構築されました。

于 2012-11-03T01:50:55.927 に答える