2011-07-12 1 views
0

私は、iOS用のBox2dエディタで、cocos2dを使って作業しています。cocos2d、b2Worldは自分のデータをどのように作成するのですか?

私は自分のワールドクラスにb2Worldをラップしました。自分の描画機能を実装したい。より高いレベルのクラス(Wall、Ropeなど)を描画するので、b2Drawサブクラスを作成し、それを世界のDebugDrawとして設定するだけでは不十分ですが、b2WorldDrawDebugDataも変更する必要があります。

ワールドクラスをCCLayerから継承し、drawメソッドをオーバーライドすることをお勧めしますか?よりよいアプローチは何ですか?

+1

私はあなた自身が答えを言ったと思います - 「私はb2World DrawDebugDataを変更する必要があります。または、より前向きな思考の解決策のために、壁を作ることができます。ロープは、作成されたBox2Dボディーへの参照を与えることで自分自身を描きます。 – iforce2d

+0

最初のアプローチは、DrawDebugDataを変更します。つまり、b2World.cppを直接変更しますか?私はそれは良いアプローチだとは思わない。また、私はb2Worldが拡張される用意はないと思う。 2番目のアプローチ:モデルオブジェクトが描画されるかもしれませんが、誰かがその描画メソッドを呼び出さなければならないので、まだアプローチ1になっています。 – Ave

+0

わかりません。あなたが望むのは、デバッグ描画を制御することだけです。これを行うために必要なのは、あなた自身のコードを - (void)drawで書くことだけです。 –

答えて

0

答えを読んでみたいと思います。

b2Worldには描画機能が実装されていても、デバッグを目的としたものなので、1行または2行を変更しない限り、そのまま使用する必要があります。

より高いレベルのオブジェクトを描画したい場合(またはデバッグ描画の動作を変更する場合)は、b2Worldの描画またはGLES-Renderを変更する必要はありません。代わりに、CCSprite/CCLayerの描画メソッドをオーバーライドします。

0

b2Body userDataにCCSpriteポインタを追加するだけで、b2Bodyにスプライトを添付できます。次に、すべてのフレームがb2ボディの位置に従ってスプライト位置を更新します。

+0

それは私が望むものではありません。私は、box2dのデバッグ描画と同じように図形を描画するのに、オブジェクトが特定の状態にあるときに色を変更するなどの機能を拡張するためにOpenGLディレクティブを扱う必要があります。 – Ave

+0

@Ave:CCSpriteのリピートdraw()関数を使用して、好きなものを描画してください – Andrew

+0

ええ、私はポイントに到達していると思います。 debugDrawを拡張する方法はありません。 1つは、それをそのまま使用するか、または最初から描画の全体を実装するかを選択する必要があります。 – Ave

関連する問題