JSON のオブジェクトを ID でリンクする(5)
JSON のオブジェクトを ID でリンクする(4) - SakuraCrowd’s blog の続きです。
jsonId を利用しようとしていた仕様が変わってしまい、必要なくなったのでいったん保留します。
とはいっても、 {"$ref":"id1"} などの ID から、その ID を持つオブジェクトの参照への変換、逆変換の簡単なテストをクリアする実装もできたので、記念として gist にしました。長いので最後にはっときます。
jsonId の実装について
gist のコメントに書いてありますが、循環参照は jsonId の置換では問題にならないのでエラー検出はしないことにしました。
JSONPath でルートの "$" のときに jsonPath.eval の第一引数を対象にしたかったのですが、空の配列が返されてしまっていたので、その部分だけ条件文で特別に処理しました。
"$[0]" などはルート配列の1番目の要素の参照を取得できるので、 jsonPath.eval(...)[0]を使っています。
反省点
jsonId を使わない仕様をなぜ最初に気づけなかったか。
それは、なるべく作成する機能に汎用性を持たせたいという悪いくせがでたためだと思います。
tmx のプロパティの編集がやりづらいので、他の json ファイルに細かい設定を書いてそれを参照させようというのがきっかけでした。
しかし、実際に自分が必要とする設定は tmx のプロパティに CSV などで4つくらいのパラメータを書くだけですむものでした。
それがなぜか、もっと複雑なものも簡単に設定したいというあいまいな仕様になってしまいました。
実際に使うデータを処理できるだけで十分だということを念頭において仕様を考えるようにしたいです。
cocos2d-js-3.0-rc0
が使えるようになりました(∩´∀`)∩ワーイ
setup.py をいちいち管理者権限で呼び出すのが面倒なのでバッチファイルを作りました。
2.2 のころと違って html を起動するだけというわけではなく、 cocos コマンドで実行するのが微妙に面倒ですが、ノードの親子関係に依存しないで奥行きを設定できたりするのが便利です。
project.json の module に extensions を追加しないと使えないのがわからず苦戦しましたが、ScrollView で簡単にスクロールできるようになってよかったです。