Luaプログラミングガイド - yappy/Qol GitHub Wiki
Lua とのやり取りについては C++ アプリケーションの裁量に任せていますが、サンプルでの動作を例に説明します。
C++ -> Lua へエクスポートされている関数
ドキュメントを参照してください。yappy::lua::export に Lua 関数仕様を(無理やり)書いてあります。
公式サイト(更新頻度に難あり) http://yappy.github.io/Qol/doc/html/index.html
ファイルの場所
- sampledata/test.lua
最初にロードされる Lua スクリプト。 - App/main_scene.cpp ロードや関数呼び出しを行っているところ。
- App/App.cpp main_scene を呼びだしているところ。共有リソースをロードしているところあり。
ファイルのロードとチャンクの実行
C++ Lua クラスの初期化後、"test.lua" をロードします。 コンパイルが成功すれば、そのコンパイル単位(ファイル全体)が1つの関数(チャンク)となるので、それをそのまま実行します。 「地の文」のような感じです。
-- 他のファイルのロードは多分この時点で行うことになるでしょう。
sys.include("../sampledata/sub.lua");
-- チャンクも関数なので、ローカル変数が定義できます。
-- このファイル内からのみ見えるので、グローバル変数ではなくなるべくこれを使うとよいでしょう。
local frame = 0;
-- 同様に、このファイルからのみ使う関数は local にするとよいでしょう。
-- 正確にはローカル変数に関数を代入します。
-- local my_local_func; my_local_func = function() ... end と等価です。
local function my_local_func()
...
end
-- C++ から呼ばれる関数はグローバル変数に設定します。
function load()
...
end
-- 関数を他のファイルに公開する場合はテーブルにまとめて
-- そのテーブルをグローバル変数として公開するとよいと思います。
mylib = {};
-- mylib.myfunc = function() ... end と同じ
function mylib.myfunc()
...
end
別ファイルのロード
sys.include(...)
を用意しています。標準のロード関数は削除されていますので、これをお使いください。
具体的な動作は以下の通りです。
- ファイルを抽象ファイル層(普通のファイルシステム, アーカイブファイル, etc.)経由でロードする
- コンパイルする
- デバッグ情報をデバッガにロードする
- チャンクを実行する
リソースロードフェイズ
C++ 側でリソースマネージャのロックを解き、リソースの登録ができる状態で load()
関数が呼ばれます。
ここ以外で resource テーブルの関数を呼ぶとエラーになります。
リソースは数値の Resource-Set ID と文字列の Resource ID で管理されています。 setId が異なれば resId は被っても大丈夫です。 サンプルでは setId=0 が C++ でも共用で使うもの、setId=1 がこのスクリプトでのみ使うもの、と一応しています。
load と言っていますがここはリソースの登録をしているだけで、この後 C++ 側で setId 毎に実際のロードを行います。 他の関数が呼ばれる頃にはロードは完了し、利用可能な状態になっています。
function load()
resource.addTexture(1, "unyo", "../sampledata/test_400_300.png");
end
シーンの開始と終了
start()
と exit()
が呼ばれることにしています。
BGM はここで操作すべきでしょう。
start はこのシーンに戻ってくる度に呼ばれるので、各変数を初期化する必要があると思われます。
update, draw ループ
update()
でゲームを1フレーム進めます。きっとコルーチンが非常に役に立つでしょう。
引数にキーボード入力を渡していたりするかもしれません。
draw()
で画面を描画します。正確には何をどこに描くかをリストに積むだけで、実際にはこの後に一気にまとめて行われます(ここにかかった時間を測っても微妙です)。
デバッガの起動
config.txt に debug.enable があり、これを true にするとデバッガが on になります。ただし、実行が遅くなります。(default on)
F12 を押すと関数呼び出し直後にブレークするようになっています。 チャンクの実行開始時にブレークしたい場合はアプリケーションの起動中に F12 を押しっぱなしにしてください。
また、実行時エラーが起きた時も自動でデバッガに入るようになっています。
使い方については Luaデバッガの使い方 を参照。