Box2Dとオブジェクト管理

Box2Dを触り始めたけど、すごく簡単ですね。


Box2Dでも後処理をしてくれてるみたいなんだけど、
結局自分でも管理する必要(たとえば画面外の物は削除するとか、その時に関連したJoinを削除とか)があってさらにそれをLuaとかで操作したりするとさらにLua側でも管理が必要でということを繰り返すと
同じようなオブジェクト管理が多重化されてしまう。


レイヤーを重ねる度にオブジェクト管理を毎回作るのはどうなのよ。


元の管理をそのまま使えばええやんとか思われるかもしれないけど、
コーディング規約から著しく外れてたりむき出しのAPIを触るのは抽象化という概念からはえらくかけ離れてるし直行性も保てないしまぁぐちゃぐちゃ書いてるけど要はキモイからそのままは嫌と。


うまいこと1元管理する方法がないかなーとか以下妄想。


名前空間を作って置いて名前を割り当てる。

nameSpace = CreateNameSpace( "Obj[01-10]", newFunc, deleteFunc );
objName = CreateObject( nameSpace );

みたいな感じで。
生成時にとか渡すと"Obj01","Obj02"とか文字列が返ってくる。
個数も制限できるし、プログラムから扱う時も文字列フォーマットで動的に扱うこともできるし。
名前空間毎の操作とかも柔軟だね。


ただ文字列は抽象度が高いけどコストがでかいのがなぁ。


コンシューマで使うにはちょっと辛いかも。
アクセスするたびにハッシュ値計算してとか。
STGみたいなオブジェクトもりもりゲーだと死ねる。


Rubyみたいなハッシュ値に範囲が持たせられる形式なら意外といけるか?


ところでオブジェクト同士の関連付けはどうする?

LinkObject( objName, refName, どちらかが削除された時のコールバック )

こうやってAPIが増えていくと結局それをラップするクラスが出来て元の木阿弥のような気もしてきた。