今度の冬コミに出すのは、(出れればの話だが)
「うさぎは絵本の中の~」の体験版ではなく、
うさぎは絵本の中の~を作るための勉強として作っている
ある意味習作を、出せればと思っています。
というか絶賛製作中です。
ーーー
今回は、ジオメトリーウォーズ風なシンプルな形で、
360度のSTGで、プチプチ敵を倒せるようにしたいと考えてます。
それと、今回は、誰でもが自機や敵を作れればいいなー、
という事をコンセプトに、のそのそと作っております。
今月末あたりから、スクリーンショットを上げれる形に
仕上げられればいいかな、と計画しています。
ががが、がんばります!
ーーー
はい、思い出しました。
今年の4月にコメントがきていたことを…。
内容は、Box2DのDebugDrawがうまく動かないという事でした。
Box2Dのバージョンは2.0.1。
C++の場合です。
Box2DのDebugDrawを使用するためには、前提としてまず
「b2DebugDraw」クラスを継承したクラスを作る必要があります。
http://www.linuxuser.at/elements/doc/box2d/classb2_debug_draw.htm
b2DebugDrawクラス
enum | { e_shapeBit = 0x0001, e_jointBit = 0x0002, e_coreShapeBit = 0x0004, e_aabbBit = 0x0008, e_obbBit = 0x0010, e_pairBit = 0x0020, e_centerOfMassBit = 0x0040 } |
上記Enumは簡単に言えば
DebugDrawで何を描画するかというフラグです。
virtual void | DrawPolygon (const b2Vec2 *vertices, int32 vertexCount, const b2Color &color)=0 |
Draw a closed polygon provided in CCW order. | |
virtual void | DrawSolidPolygon (const b2Vec2 *vertices, int32 vertexCount, const b2Color &color)=0 |
Draw a solid closed polygon provided in CCW order. | |
virtual void | DrawCircle (const b2Vec2 ¢er, float32 radius, const b2Color &color)=0 |
Draw a circle. | |
virtual void | DrawSolidCircle (const b2Vec2 ¢er, float32 radius, const b2Vec2 &axis, const b2Color &color)=0 |
Draw a solid circle. | |
virtual void | DrawSegment (const b2Vec2 &p1, const b2Vec2 &p2, const b2Color &color)=0 |
Draw a line segment. | |
virtual void | DrawXForm (const b2XForm &xf)=0 |
Draw a transform. |
それからこれは「virtual」ですから、抽象メソッド(仮想関数)です。
抽象メソッドは、別クラスによって継承しなければ使用することができません。
そのため、このb2DebugDrawクラスを継承させる必要があります…
class DebugDraw : public b2DebugDraw { public: void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color); void DrawPolygon(const b2Vec2& center, const b2Vec2* vertices, int32 vertexCount, const b2Color& color); void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color); void DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color); void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color); void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color); void DrawXForm(const b2XForm& xf); };
こんな感じです:-)
内容に関しては、私の場合DXライブラリを使っていろいろやってます。
void DebugDraw::DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) { int mode;//一時BLEND記録領域 int parm;//一時BLENDパラメータ記録領域 GetDrawBlendMode(&mode,&parm); SetDrawBlendMode(DX_BLENDMODE_NOBLEND,128); int i = 1; for(; i < vertexCount; i++) { DrawLine(static_cast(vertices[i-1].x * global::SCALE),static_cast (vertices[i-1].y * global::SCALE), static_cast (vertices[i].x * global::SCALE),static_cast (vertices[i].y * global::SCALE), GetColor(static_cast (255*color.r), static_cast (255*color.g), static_cast (255*color.b))); } DrawLine(static_cast (vertices[0].x * global::SCALE),static_cast ( vertices[0].y * global::SCALE), static_cast (vertices[i-1].x * global::SCALE),static_cast ( vertices[i-1].y * global::SCALE), GetColor(static_cast (255*color.r), static_cast (255*color.g), static_cast (255*color.b) )); SetDrawBlendMode(mode,parm); }
DrawPolygonに関してはこんな感じです
注釈すくなく、さらにきたなくてすんません。
さらに言えばタグがひどい(w
さて、これをVirtualがあるだけやっていくと
とりあえずはDebugDrawは動く状態になります。
ーーー
実際に使う際はこうです
DebugDraw* debug = new DebugDraw(); debug->SetFlags( 0xFFFF ); global::boxglobal::g_world->SetDebugDraw(debug);
0xFFFF の部分には、上記の enum を入れましょう
debug->e_***
という感じで、複数指定したいときは
debug->e_*** + debug->e_***
で問題ありません。
そんなもんです、はい。
それじゃあ今日のところは終わり
0 件のコメント:
コメントを投稿