2010-12-11 4 views
1

私が作っているゲームは、単純なエンティティシステムを持っています。私はCEntityクラス(継承、コンポーネントベースではない)とエンティティマネージャを持っています。ルア:私のゲームエンティティシステムのバインドに関する問題

CEntityはLuaにメタデータでバインドされており、Luaから新しいエンティティを作成すると、割り当てられたuserdata内にC++で新しいエンティティが作成されます。

だからそれはすべての罰金しかし、私は1つの巨大な問題に遭遇していることになります。

  • どのように私はents.GetByID(のようなものを実装してください)?

ents.GetByID()は、ID xのエンティティへの参照を返す必要があります。私が現在行っていること:新しいユーザデータを作成し、既存のエンティティxのmemcpy()を埋めてください。

これは明らかにうまくいきません。まず、エンティティマネージャを駄目にします。そして、2番目に、「参照」エンティティを変更すると、実際のエンティティは同じままです。

  • スタック上の既存のuserdatumへの参照をプッシュするにはどうすればよいですか?
+0

OPが質問の削除を要求し、内容を消去しました。 @キャット:なぜですか? – Eric

答えて

0

基本的には、Luaレジストリ内の特定のキー(IDなど)をユーザーデータにバインドする必要があります。また、memcpy =悪い、mmkay?

Luaレジストリテーブルを返す単純なC関数を書いたのであれば、このコードをLua側で書くのは簡単で簡単です。

make_entity = function(ID, ...) 
    local entity = CreateEntity(...); 
    get_registry().EntityIDMap[ID] = entity; 
    return entity; 
end 

get_entity = function(ID) 
    return get_registry().EntityIDMap[ID]; 
end 
関連する問題