2011-10-19 12 views
2

現在、私はテーブルを使っているOOPのようなものをluaに持っています。テーブルからLua C APIテーブルを作成

TCharacterController = {} 
TCharacterController.speed = 10.0 
TCharacterController.axis = "x" 

function TCharacterController:new(o) 
    o = o or {} 
    setmetatable(o, self) 
    self.__index = self 
    return o 
end 

function TCharacterController:update() 
    --this is a function that is called by the C application 
end 

コンセプトは、私は自分のアプリケーション内のオブジェクトに接続された各スクリプトインスタンスの子オブジェクト

ScriptObj = TCharacterController:new() 

を(これはゲームのためである)を作成することです。だから私はエンティティレイヤーを持っており、すべてのエンティティにScriptObjを添付することができます。私の考えは、スクリプトは実際にはクラスであり、それが添付されている各エンティティに対してインスタンス化されているということです。

私の質問は、C APIを使用してTCharacterControllerのインスタンスをインスタンス化するにはどうすればいいですか?

答えて

3

新しい自己参照に糖衣構文を使用しているので、あなたが最初の引数としての自己を渡す必要があり、残りはテーブルルックアップの単なる関数呼び出しです:

lua_getglobal(L, "TCharacterController"); /* get the table */ 
lua_getfield(L, -1, "new"); /* get the function from the table */ 
lua_insert(L, -2); /* move new up a position so self is the first arg */ 
lua_pcall(L, 1, 1); /* call it, the returned table is left on the stack */ 
+0

はありがとうございました。 –

関連する問題