2012-03-15 11 views
0

私はBox2DでCocos2Dを使用し、単一のフィクスチャを持つボディから対応するスプライトを持つ複数のフィクスチャを持つボディに移動します。ボディごとに複数のフィクスチャを使用する場合のスプライトの配置

body->GetTranform().p.x + shape->m_centroid.x 
body->GetTranform().p.y + shape->m_centroid.y 
body->GetTransform().q.GetAngle() 

ボディが回転するまで、スプライトを適切に配置することができます。その時点で、すべてのスプライトが兄弟に関連して回転し、すべてのグループが(0、0)ボディアンカーポイントであると考えられるものの周りを回転しながら、すべてがうまくいきません。

私の推測では、Cocos2D/Box2Dには、必要な変換を実行するための単純な組み込みメソッドがありますが、これは文書化されていません。私のスプライトを正しく配置する最良の方法は何ですか?

+0

ラジアンまたは度を使用していますか? GetAngleはラジアンを返します。 – iforce2d

+0

はい、コードサンプルのメートル - >ピクセルとラジアン - >度の変換を省略しました。私が言及したように、私はこれをシングルフィクスチャーボディで行っています。問題は、b2PolygonShapeのm_centroidが変換されないことです。私が見つけたいと思っていたものは、shape-> getTransform()のようなものでしたが、それは存在しません。しかし、私は最終的に私が必要なものを見つけました。以下の私の解決策を見てください。 – user371320

答えて

0

最終的に私が探していた変換関数が見つかりました。

b2Vec2 ptWorld =body->GetWorldPoint(shape->m_centroid); 

は、ボディの原点を基準として測定されたフィクスチャ形状の座標をワールド座標に変換します。メートルからピクセルに変換した後、ptWorldのx座標とy座標を使用してスプライトの位置を設定できます。

0

更新ティック機能で体の中心に対してスプライトを回転させてみてください。

関連する問題