例:
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50}
テーブル player.shape がどのテーブルにあるかを教えてくれる関数がLuaにあるので、次のようなことができます:
shape_a = player.shape
some_function(shape_a) = player
例:
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50}
テーブル player.shape がどのテーブルにあるかを教えてくれる関数がLuaにあるので、次のようなことができます:
shape_a = player.shape
some_function(shape_a) = player
親テーブルへの参照をシェイプに保存しないのはなぜですか?
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
。
Lua の値はどこでもかまいません。一度に多くの異なる場所に存在する可能性があります。実際、あなたのコードはそれを明確に示しています:
shape_a = player.shape
テーブルは 2 つの場所にあります。shape
グローバル テーブル ( という名前の下shape_a
) とplayer
テーブル ( 名前 の下shape
) です。
値は、実際には名前を持たないローカル変数に含めることができます (コンパイラがそれらを使い終わった後ではありません。
あなたが望むことは、一般的に不可能です。
あなたはおそらくbox2Dまたはシマリスの物理学について話しているでしょう。(ニコル・ボーラスの返信のコメントを参照しています)。
私がよく覚えていれば、Chipmunk (あなたが何を使用しているかについての私の推測です) にデータフィールドがあれば、どちらにもそれを行う方法があります。
シマリスのマニュアルから:
cpDataPointer cpBodyGetUserData(const cpBody *body)
void cpBodySetUserData(cpBody *body, const cpDataPointer value)
ユーザー データ ポインター。このポインターを使用して、コールバックからこの本体を所有するゲーム オブジェクトへの参照を取得します。