0

例:

player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50}

テーブル player.shape がどのテーブルにあるかを教えてくれる関数がLuaにあるので、次のようなことができます:

shape_a = player.shape
some_function(shape_a) = player
4

3 に答える 3

6

親テーブルへの参照をシェイプに保存しないのはなぜですか?

player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50, parent = player}

次のようなメタメソッドを使用して自動的に行うことができます。

local new_player = function()
  return setmetatable(
    {},
    {
      __newindex = function(t,k,v)
        if k == "shape" then v.parent = t end
        rawset(t,k,v)
      end,
    }
  )
end

player = new_player()
player.shape = {x = 0, y = 0, w = 50, h = 50}

これで、 を呼び出してシェイプからプレーヤーにアクセスできますshape.parent

于 2012-11-21T09:54:47.680 に答える
1

Lua の値はどこでもかまいません。一度に多くの異なる場所に存在する可能性があります。実際、あなたのコードはそれを明確に示しています:

shape_a = player.shape

テーブルは 2 つの場所にあります。shapeグローバル テーブル ( という名前の下shape_a) とplayerテーブル ( 名前 の下shape) です。

値は、実際には名前を持たないローカル変数に含めることができます (コンパイラがそれらを使い終わった後ではありません。

あなたが望むことは、一般的に不可能です。

于 2012-11-21T05:48:26.470 に答える
0

あなたはおそらくbox2Dまたはシマリスの物理学について話しているでしょう。(ニコル・ボーラスの返信のコメントを参照しています)。

私がよく覚えていれば、Chipmunk (あなたが何を使用しているかについての私の推測です) にデータフィールドがあれば、どちらにもそれを行う方法があります。

シマリスのマニュアルから:

cpDataPointer cpBodyGetUserData(const cpBody *body)
void cpBodySetUserData(cpBody *body, const cpDataPointer value)

ユーザー データ ポインター。このポインターを使用して、コールバックからこの本体を所有するゲーム オブジェクトへの参照を取得します。

于 2012-11-21T11:18:08.403 に答える