defold プログラム 方針 メモ
defold でのプログラムにあたり, 考察したことをメモとして残していきます
まったくもって defold の全貌を把握できていないので, ボクがまだ気づいていないもっとスマートな実装方法はおおいにあると思いますが, いまは泥臭い作りでも形にしていくことを優先としているため, あくまで現時点でボクが妥当そうと考えている作りについてとなります
go の wrapper class ( go self の参照を持つ 外部から扱える object ) は 作らないことにした
id -> go ( self ) の対応を global 管理下で保持して参照するといったこともやらない
defold が提供しているしくみにできるだけ準じたまま作る
外部 ( 他の go instance 処理 ) からは go の id を持っているのみとする
外部からは msg.post() を通じて非同期で命令をだす
自己作成の go の 共通関数 ( method ) は go の init() 内で self に追加する ( 擬似 extend )
parent をつける時点で必ず z 位置を意識するようにする ( parent との相対 z 位置 )
go ( self ) への 動的関数渡しを行いたい
global 管理された function に idx をふり,
その idx を go.set(id, key, idx) で渡す
go には go.property(key, default_idx) を設定しておく
基本的に on_message() の中に具体的な処理は書かない
message_id に対応する処理をすべて method 化しておき,
init() 時に擬似 extend しておく
on_message() の中では対応する method を call するのみ
親子関係を持つ go instance は go.property(key, hash("")) で
id を保持するようにする
関係が 2つ以上離れた go instance は go.get(id, key) を芋づる式に呼んで
id をたどる
たどって取得した go instance に処理を出したい場合は
msg.post(id, "...") を送り, 非同期で処理をさせる
go.set_position() は id をパラメータに指定すれば
外部からでも同期処理で位置設定することができるが, これをやらない方針とする
位置設定も外部から指定したい場合には, msg.post() を経由して行う
sprite へ msg.post() を出すときなど,
script 以外の component へ post する場合でも,
いったん script への msg.post() を経由して処理を行う
処理順が不透明にならないようにするため
つまり, 外部からの msg.post() はすべて script へ post する作りにする
go.property(key, val) には外部から get したい値か, create() と同時に設定したい値を定義する
外部からの set は msg.post() 経由でも設定できる