冬コミ合否は明日です
うっほ!うっほーう!っほお11!11
売かっても受かってなくても、
来年の頭くらいには、変なものをなんとか提供する予定ですけど
受かって欲しい、というか、受かってくれ!
2010年10月20日水曜日
結論
勘 違 い で す
日本語はLuaInterfaceでも使えました
先日出したあのソースは確かにCallで失敗していました
結局それは治りませんでしたがそんなことは良かったのです
LuaInterfaceで動いたからイイノデス!
LuaInterfaceで日本語を使う方法は簡単な事だった。
まぁ説明もなしなんでどうかと思うんですが
ようは.GetEncoding("shift_jis")ですよ.GetEncoding("shift_jis")
前まで、ここの
.GetEncoding("shift_jis")
が
.GetEncoding("EUC_jp")
だったんですよねー
ニホチニヒホリみたいな文字化けしてたんで
おかしいなーとか心の浅いところで思ってたんだけど
LuaInterfaceのせいにしてたよ俺
最低だ……
あ、ちなみに前にも書いたけど
LuaInterfaceでの記述はこんな感じね、
最新版じゃなくてちょっと古いやつを使っているよ
日本語はLuaInterfaceでも使えました
先日出したあのソースは確かにCallで失敗していました
結局それは治りませんでしたがそんなことは良かったのです
LuaInterfaceで動いたからイイノデス!
LuaInterfaceで日本語を使う方法は簡単な事だった。
'日本語を書き込むところの処理 If (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(_targetFullPass)) = True) Then System.IO.File.WriteAllText(_targetFullPass, Writestr, System.Text.Encoding.GetEncoding("shift_jis")) Else Dim GrfPath As String = New System.IO.FileInfo(URLTextBox.Text).Directory.Name System.IO.Directory.CreateDirectory(_exeurl + "\scripts\GraphicScripts\" + GrfPath + "\") System.IO.File.WriteAllText(_targetFullPass, Writestr, System.Text.Encoding.GetEncoding("shift_jis")) End If
まぁ説明もなしなんでどうかと思うんですが
ようは.GetEncoding("shift_jis")ですよ.GetEncoding("shift_jis")
前まで、ここの
.GetEncoding("shift_jis")
が
.GetEncoding("EUC_jp")
だったんですよねー
ニホチニヒホリみたいな文字化けしてたんで
おかしいなーとか心の浅いところで思ってたんだけど
LuaInterfaceのせいにしてたよ俺
最低だ……
あ、ちなみに前にも書いたけど
LuaInterfaceでの記述はこんな感じね、
最新版じゃなくてちょっと古いやつを使っているよ
'存在している場合 Dim L As New LuaInterface.Lua 'LUA読み取り L.DoFile(full) 'LUAのGraphicSettingを格納 Dim func As LuaInterface.LuaFunction = L.GetFunction("GraphicSetting") '関数呼び出し Dim a = func.Call() '関数の戻り値を格納 HelpTextBox.Text = a(0) TypeComBox.SelectedIndex = a(1) AllNumNmBox.Text = a(2) XNumNmBox.Text = a(3) YNumNmBox.Text = a(4) XSizeNmBox.Text = a(5) YSizeNmBox.Text = a(6)
2010年10月19日火曜日
ぐぬぬ(メモ)
LuaInterfaceだと日本語読めないよといわれたから
仕方ないからTaoを使うようにした
そしたらどうもCallがうまいこといかない
仕方ないからTaoを使うようにした
そしたらどうもCallがうまいこといかない
'存在している場合 Dim L As New System.IntPtr L = Tao.Lua.Lua.luaL_newstate() Tao.Lua.Lua.lua_open() 'LUA読み取り Tao.Lua.Lua.luaL_openlibs(L) If Tao.Lua.Lua.luaL_loadfile(L, full) Then Dim str = Tao.Lua.Lua.lua_tostring(L, 1) MessageBox.Show(str, "err") End If Dim top = Tao.Lua.Lua.lua_gettop(L) '関数名Push Tao.Lua.Lua.lua_getglobal(L, "GraphicSetting") '関数呼び出し(ここでNULLがかえる) If Tao.Lua.Lua.lua_pcall(L, 0, 7, 0) Then Dim str = Tao.Lua.Lua.lua_tostring(L, 1) MessageBox.Show(str, "err2") End If '関数の戻り値を格納 Dim a = Tao.Lua.Lua.lua_tostring(L, 1) Dim b = Tao.Lua.Lua.lua_tointeger(L, 2) Dim c = Tao.Lua.Lua.lua_tointeger(L, 3) Dim d = Tao.Lua.Lua.lua_tointeger(L, 4) Dim f = Tao.Lua.Lua.lua_tointeger(L, 5) Dim g = Tao.Lua.Lua.lua_tointeger(L, 6) Dim h = Tao.Lua.Lua.lua_tointeger(L, 7) 'HelpTextBox.Text = Tao.Lua.Lua.lua_tostring(L, 0) 'TypeComBox.SelectedIndex = Tao.Lua.Lua.lua_tointeger(L, 1) 'AllNumNmBox.Value = Tao.Lua.Lua.lua_tointeger(L, 2) 'XNumNmBox.Value = Tao.Lua.Lua.lua_tointeger(L, 3) 'YNumNmBox.Value = Tao.Lua.Lua.lua_tointeger(L, 4) 'XSizeNmBox.Value = Tao.Lua.Lua.lua_tointeger(L, 5) 'YSizeNmBox.Value = Tao.Lua.Lua.lua_tointeger(L, 6) Tao.Lua.Lua.lua_settop(L, top)
2010年10月18日月曜日
四苦八苦
VB.netマルチスレッドで動かしているプログラムで
DX.GetMouseInput()
を利用できない。
私の書き方が悪いのか、なんか良く解らんが困った。
とりあえず、
WinAPIのGetAsyncKeyStateで代用
同時に問題が発生。
DX.GetMouseInput()
の場合、当然だがウィンドウ内でクリックされた時に
「ボタンが押されたよ」と返事が来るわけだが、
GetAsyncKeyStateの場合は
画面上でなくても「ボタンが押されたよ」と返事が来る。
そこで、DXライブラリによって生成されたWindowが
Active状態でのみ判定を起こすことにした
DX.GetWindowActiveFlag()
かなりブサイクな挙動だけどできたー!やったー!
DX.GetMouseInput()
を利用できない。
私の書き方が悪いのか、なんか良く解らんが困った。
とりあえず、
WinAPIのGetAsyncKeyStateで代用
同時に問題が発生。
DX.GetMouseInput()
の場合、当然だがウィンドウ内でクリックされた時に
「ボタンが押されたよ」と返事が来るわけだが、
GetAsyncKeyStateの場合は
画面上でなくても「ボタンが押されたよ」と返事が来る。
そこで、DXライブラリによって生成されたWindowが
Active状態でのみ判定を起こすことにした
DX.GetWindowActiveFlag()
かなりブサイクな挙動だけどできたー!やったー!
'マウス左クリック If DX.GetWindowActiveFlag() Then If GetAsyncKeyState(Keys.LButton) Then _Mouse = DX.MOUSE_INPUT_LEFT End If End If
2010年10月17日日曜日
小言
しらなんだ、DXライブラリは、VB.netでも動くんだ
これで色々と楽になりそう。
使い方
1.公式からC#のDXライブラリを取ってくる
2.VSでDXライブラリを使いたいプロジェクトを開く
3.プロジェクト→参照の追加
4.参照を追加→DXLibDotNet.dllを参照する
5.Releaseフォルダ及びDebugフォルダに
(VisualStudioフォルダのProject→開いたプロジェクト→bin)
DxLib.DLLを入れる
6.Imports DxLibDLL と入れて
あとはDX.と入力するとインテリジェンス君が色々教えてくれる
実際使ってみると
Formとは別窓にウィンドウが出ます
素敵!
これで色々と楽になりそう。
使い方
1.公式からC#のDXライブラリを取ってくる
2.VSでDXライブラリを使いたいプロジェクトを開く
3.プロジェクト→参照の追加
4.参照を追加→DXLibDotNet.dllを参照する
5.Releaseフォルダ及びDebugフォルダに
(VisualStudioフォルダのProject→開いたプロジェクト→bin)
DxLib.DLLを入れる
6.Imports DxLibDLL と入れて
あとはDX.と入力するとインテリジェンス君が色々教えてくれる
実際使ってみると
Formとは別窓にウィンドウが出ます
素敵!
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は簡単に言えば
DebugDrawで何を描画するかというフラグです。
それからこれは「virtual」ですから、抽象メソッド(仮想関数)です。
抽象メソッドは、別クラスによって継承しなければ使用することができません。
そのため、このb2DebugDrawクラスを継承させる必要があります…
こんな感じです:-)
内容に関しては、私の場合DXライブラリを使っていろいろやってます。
DrawPolygonに関してはこんな感じです
注釈すくなく、さらにきたなくてすんません。
さらに言えばタグがひどい(w
さて、これをVirtualがあるだけやっていくと
とりあえずはDebugDrawは動く状態になります。
ーーー
実際に使う際はこうです
0xFFFF の部分には、上記の enum を入れましょう
debug->e_***
という感じで、複数指定したいときは
debug->e_*** + debug->e_***
で問題ありません。
そんなもんです、はい。
それじゃあ今日のところは終わり
今度の冬コミに出すのは、(出れればの話だが)
「うさぎは絵本の中の~」の体験版ではなく、
うさぎは絵本の中の~を作るための勉強として作っている
ある意味習作を、出せればと思っています。
というか絶賛製作中です。
ーーー
今回は、ジオメトリーウォーズ風なシンプルな形で、
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_***
で問題ありません。
そんなもんです、はい。
それじゃあ今日のところは終わり
2010年10月11日月曜日
.netからLUAの呼び出し
お久しぶりです、そろそろ適当ノリが良くなってきたので
個人的な事をひたすら書き連ねていきたいと思います
ちょっとした理由から、VB.netからLuaを呼び出す必要が出た(というかそのほうが楽だった)
ので、色々と調べてみた所、呼び出すことは可能なようだったのでメモ書き
VBからLUAを呼び出すには
LuaInterface.dllが必要
luainterface-2.0.1.zip
中のLuaとLuaInterfaceのdllをとりあえず
プロジェクトファイルにでも突っ込む
こんな感じで
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
個人的な事をひたすら書き連ねていきたいと思います
ちょっとした理由から、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
登録:
投稿 (Atom)