自己紹介

低層をがむしゃらに走る自称プログラマ ちょっとWebとかに手を出してる

ブログ アーカイブ

2010年10月14日木曜日

考えてること

突然なんですが、


今度の冬コミに出すのは、(出れればの話だが)
「うさぎは絵本の中の~」の体験版ではなく、

うさぎは絵本の中の~を作るための勉強として作っている
ある意味習作を、出せればと思っています。

というか絶賛製作中です。

ーーー

今回は、ジオメトリーウォーズ風なシンプルな形で、
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 &center, float32 radius, const b2Color &color)=0
Draw a circle. 
virtual void DrawSolidCircle (const b2Vec2 &center, 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_***

で問題ありません。


そんなもんです、はい。
それじゃあ今日のところは終わり

2010年10月11日月曜日

.netからLUAの呼び出し

お久しぶりです、そろそろ適当ノリが良くなってきたので
個人的な事をひたすら書き連ねていきたいと思います

ちょっとした理由から、VB.netからLuaを呼び出す必要が出た(というかそのほうが楽だった)
ので、色々と調べてみた所、呼び出すことは可能なようだったのでメモ書き

VBからLUAを呼び出すには
LuaInterface.dllが必要

luainterface-2.0.1.zip

中のLuaとLuaInterfaceのdllをとりあえず
プロジェクトファイルにでも突っ込む

次にVisualStudioのプロジェクト
↓
参照の追加
↓
LuaInterface.dllを追加する

でとりあえずLuaDLLが使える状態になる

---------------------

'関数を呼び出し、5つの戻り値を各TextBoxに格納するのだ

'Luaクラスをインスタンス化
 Dim L As New LuaInterface.Lua


'fullはLuaファイルへのフルパスが格納されている
L.DoFile(full)


'GetFunctionメソッドでLuaメソッドを、func(LuaFunctionクラス)に格納
Dim func As LuaInterface.LuaFunction = L.GetFunction("GraphicSetting")


'関数を呼び出す
Dim a = func.Call()


'各戻り値が a() に格納される、
'それをTextBoxに入れる作業…


AllNumTextBox.Text = a(0)
XNumTextBox.Text = a(1)
YNumTextBox.Text = a(2)
XSizeTextBox.Text = a(3)
YSizeTextBox.Text = a(4)

---------------------

こんな感じで
VB.netでLuaの呼び出しが出来ました
最新版のLuaInterface.dllは使い方がよくわからなかったので、触ってません
大分使い方が違うよう?でしたが…
以下のサイトを参考にさせていただきました


http://blog.cnu.jp/2008/11/18/csharp%E3%81%ABlua%E3%82%92%E7%B5%84%E3%81%BF%E8%BE%BC%E3%82%80/#more-163 http://blog.livedoor.jp/akf0/archives/51607378.html

2010年8月31日火曜日

再構築

いろいろと再構築中…

現状、クラスの構造が結構面倒
BOX2Dとの絡みもあって、楽にしようと思った結果、確かに楽にはなったんだけど、
もう少し簡潔にできるんじゃないかなー、なんてことを考えたりもする

考えたりもするけど、いい案が思い浮かばず、嗚呼夢想

2010年8月22日日曜日

冬コミ

冬コミ申し込みましたー
ウカればいいなー

2010年8月16日月曜日

夏コミ

夏コミお疲れ様でした
そして、体験版をお買い上げいただいた方、
本当にありがとうございました。

お買い上げいただいた方に失礼かと思いますが、
正直、私個人の考えとしては、良い出来だとはとても思えません。
本当に申し訳ない気持ちと、感謝の気持ちで一杯です。

冬コミの参加についても、
すこし期間を設ける意味でどうしようか考え中でもあります。
かと言って、下手に期間を延ばしても、モチベーション的にどうかな、とも思うのですが…。

まぁ、その件についてはまた後日報告させていただきます。

とりあえず、今回はこのへんで。

2010年8月12日木曜日

わお

某所で補足されていたので。
久々に更新…いいのかそれで。


発汗プリン体
二日目 W-24a

とりあえずマスターアップは済ませて、
ひとまずは一段落です。
正直、一応形にはなったかな、という感じですが、
体験版の体験版に近い感じ…、ああ、胃が痛い。

―――

ウサギは絵本の中で夢を見るか?(体験版)



一応物理演算とか使ってます。
正直そこまで、物理演算っぽさは無いです。

敵をつかんで投げたり回したり出来ます。




今回の体験版ではステージ2クリアまでプレイすることが出来ます。


こんな感じです。

2010年7月5日月曜日

更新しなさすぎ

もう少しゲームのことを垂れ流さねば…などと思いつつも…
うーむ、ちょっと、メンバーと話あってみますか