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(...) を用意しています。標準のロード関数は削除されていますので、これをお使いください。

具体的な動作は以下の通りです。

  1. ファイルを抽象ファイル層(普通のファイルシステム, アーカイブファイル, etc.)経由でロードする
  2. コンパイルする
  3. デバッグ情報をデバッガにロードする
  4. チャンクを実行する

リソースロードフェイズ

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デバッガの使い方 を参照。