[C#][Lua]LuaInterfaceでコルーチン

昨日に引き続きLua関連。

LuaInterfaceにはサイトでよく紹介されてた、lua_newthreadやらlua_resumeがないので、かなり焦った。
けど、なんとか動くものが出来たのでメモメモ。

おいらにはLuaInterfaceでcoroutineの関数を呼び出すやり方が分からなかったので、
Lua側でそれらの制御をしてもらうことにした。

で、最初はこんな感じのコードになった。

lua
function Update() --~別のソースファイルで内容を書く
end

function StartUpdate()
LuaUpThread = coroutine.create( Update );

com, states = coroutine.resume( LuaUpThread );
return states
end

C#
public void LuaUpdate() //こいつを毎フレーム呼ぶ
{
Console.WriteLine( (string)lua.GetFunction("StartUpdate").Call()[0] );
}


わかる人にはわかるだろうけど、これがとんでもないコードで、なけなしの睡眠時間がこのせいで吹っ飛んだ。
これを実行するとどうなるかと言うと、ずっとUpdateの最初から最初のyieldまでずっとループする。

おかげでキャラクターが同じところを右往左往する事態になり、
最初はキャラクター制御しているコードばかりいじってこれに気づくのに大変時間がかかった。

毎回create呼んで、スレッドを新しく作り直してるのである。あほですね。

lua
function Update()
end

LuaUpThread = coroutine.create( Update );

function StartUpdate()
ThSt = coroutine.status(LuaUpThread);
if ThSt == "dead" then
LuaUpThread = coroutine.create( Update );
end
com, states = coroutine.resume( LuaUpThread );
return states
end

ということで、コルーチンを一つだけ登録するようにした。完璧。動いた。超うれしい。
でも深夜なのであんまり気分が上がらない。

書いてみると、呆気無いなぁ。とても5時間頭を抱える問題とは思えない^q^

参考にしたサイト
コルーチンで状態遷移をLuaで制御
Lua 5.1 リファレンスマニュアル
コルーチン初歩の初歩
Lua/AI/Error
まさかROのWikiを見るとは思わなかった。
スポンサーサイト
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

自分のゲーム制作での備忘録や製作記録を書き留めておくブログです。

■やってるサービス
Twitter:piorimumu

Pixiv
http://www.pixiv.net/member.php?id=1126385

Twitter
このページのトップへ