組み込みスクリプトの組み込み(1)
さて、ようやく色々目処がついてきたので、これまでの経験を元に、ゲームフレームワークを作っていきたいと思っています。
当面は、フレームワークの話は無しで(爆)、Luaを外部スクリプトとして組み込む作業を進めて行きます。なにをLuaに担当させ、なにをさせないのかが重要なポイントです。
とりあえず、昔書いたコードを引っ張り出して動作を確認しつつ、最新の5.1にLuaをアップデートして……とやっていたら、5.1が全然動かない。試行錯誤の結果やっと動いたので、ネイティブ言語側からの5.0->5.1の(コード修正が必要な)変化についてメモって起きます。
lua_openはluaL_newstate(新しいLuaステートを開始する)のシンタックスシュガーになりました。
lua.h #define lua_open() luaL_newstate()
luaL_newstateは、lua_newstate(メモリ確保関数をユーザーが指定出来る)の、標準版(cのreallocを仕様)です。
lua_dofileは無くなりました(なんで!! しかもドキュメントに記載無いし!)。lua_loadファイルだけでは構文木解析のみで、チャンクが実行されないので、以下のように、明示的に実行する必要があります。
if(luaL_loadfile(lua, "test.lua") != 0 || lua_pcall(lua, 0, 0, 0) != 0){ //エラー処理 }
これがわからなくて昨日数時間をつぶしました。へたれでごめん……orz まあ、わからんんでも無い仕様変更ではあります。