2

現在、Lua を使用した MOAI プロジェクトに取り組んでいます。いくつかのゲーム オブジェクトに対していくつかのストレス テストを設定しようとしています。次に、ゲーム セッション中に自分が持っている Lua オブジェクトがいつ作成され、いつ破棄されるかを追跡します。「クラス」オブジェクト/テーブルがいつ作成されたかを簡単に追跡できます。コンストラクターまたはイニシャライザーでカウントをインクリメントすることによって初期化されます.しかし、Lua にはデストラクタがないため、オブジェクトがメモリから削除されたときにどのように追跡できるかわかりません.

この問題に関する助けや提案をいただければ幸いです。ありがとう!

4

2 に答える 2

2

Lua オブジェクト (完全なユーザーデータまたはテーブルと仮定します) がなくなったときに通知を受けるには、_gc メタメソッドを設定します。

于 2013-03-14T18:02:14.547 に答える
1

おそらく、ネストを使用した弱いテーブルがあなたの答えです。ここにスニペットがあります:

objectArray={}

function newObj(...)
   --your OOP code here
   --obj is the new table you made
   objectArray[#objectArray+1]=setmetatable({obj},{__mode='v'})
end

ここで、すべてのフレームを実行する関数/ブロックで:

for i=1,#objectArray do --no pairs for efficiency, being run every frame this matters
   local stillThere=#objectArray[i]
   stillThere=stillThere==1
   if not stillThere then deconstruct() end
end

残念ながら、テーブルを取り戻すことはできません。__index は GC を停止するため、これに対する簡単な解決策があるかどうかはわかりません。

于 2013-03-18T22:11:03.717 に答える