RCOmageXML
ここで使用するXMLはCTFtool_v5beta付属のRCOmageで生成されたもの。
FWバージョンによってRCOファイルの内容は多少異なるが、記述のルールは同じである。
※要素や属性の識別名は展開するRCOmageの構成設定ファイルによって異なるため、
展開したものと別のRCOmageでコンパイルするとエラーが出る場合があるので注意。
展開したものと別のRCOmageでコンパイルするとエラーが出る場合があるので注意。
RCOmageXMLの構造
展開して出来たXMLファイルをテキストエディタ等で開いてみると、
RCOファイルは<ImageTree><Page><Plane><Animation>等の様々な要素で構成されていることがわかる。
これらの要素がRCOxml内における基本的な情報単位であり、それぞれの要素は<xxxx>から開始され </xxxx> で終了する。
※アニメーション要素など<xxxx />という形で記述されるものもある。
また<xxxx xx="xx">という形で内部に属性を持つ要素もある。
属性とは要素の特徴であり、同じ種類の要素であっても属性の値が異なればそれぞれ別の内容となる。
各要素の持つ属性は予め決まっていて、削除や追加をすることはできない。
例としてもっとも一般的なPlane要素を見てみると
<Plane name="object01" posX="0" posY="0" objectScale="0" redScale="1" greenScale="1" blueScale="1" alphaScale="1" width="0" height="0" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onInit="nothing" image="nothing" displayMode="0x0"></Plane>
このように記述されていて、
要素の種類は Plane であり、name(要素の名称)、posX(X座標)、redScale(赤色のレベル)等の様々な属性を持っていて、
それぞれに値が設定されているということが読み取れる。
こういった要素を追加したり、既に配置されているものの属性の値を変更することがRCOファイル編集の基本となる。
各要素や属性の詳細については
RCOmageXMLで使用される要素と属性を参照のこと
またこれらの要素は階層的な関係性にあり
RCOファイルは、大まかに
<RcoFile>
<MainTree>
<ImageTree>
<ImageTree内で使用される要素>
</ImageTree>
<TextTree>
<TextTree内で使用される要素>
</TextTree>
<ModelTree>
<ModelTree内で使用される要素>
</ModelTree>
<SoundTree>
<SoundTree内で使用される要素>
</SoundTree>
<ObjectTree>
<ObjectTree内で使用される要素>
</ObjectTree>
<AnimTree>
<AnimTree内で使用される要素>
</AnimTree>
</MainTree>
</RcoFile>
といった構造をしている。
実際にこれらを編集する際はImageTreeからAnimTree内の要素を編集、または対応する要素を追加していくことになる。
ImageTreeやAnimTreeを持たないRCOファイルもあるが、必要であれば上記の基本構成を守りつつ新規に追加すればよい。
各Treeの概要は以下のようになる。
<ImageTree> ~ </ImageTree>
RCOファイル内に画像データを格納する。
<TextTree> ~ </TextTree>
RCOファイル内にテキストデータを格納する。
<ModelTree> ~ </ModelTree>
RCOファイル内にウェーブモデルデータを格納する。
<SoundTree> ~ </SoundTree>
RCOファイル内に音声データを格納する。
<ObjectTree> ~ </ObjectTree>
ImageTree、TextTree、ModelTreeに格納されたデータをオブジェクトとして画面上に配置する。
またアニメーションもここに配置された要素から実行する。
<AnimTree> ~ </AnimTree>
アニメーション要素を配置する。
ImageTree、ModelTree、SoundTreeの編集
ファイル名、ファイルのパス、フォーマット等の属性を指定した要素を配置する。
ここで指定した名称属性をObjectTree内の要素がもつimage、text、model属性から参照させて使用する。
TextTreeの編集
実際に表示するテキストは各言語ごとに用意されたXMLにまとめられているので、ここを編集する必要は特にない。
それらのXML内の各名称属性をObjectTree内の要素がもつtext属性から参照させて使用する。
参考資料
Rcomageガイド(7) テキストデータの追加:藍色通信
ObjectTreeの編集
ObjectTree内でのルールを3つ解説しておく。
これらをある程度理解しておくと、編集や構造把握の役に立つ。
1. 後に配置された要素ほど上層に表示される
<Plane name ="object01" ~以下属性略~ >
</Plane>
<Plane name ="object02" ~以下属性略~ >
</Plane>
この場合、object02は常にobject01よりも上層に表示される。
※これはRCOファイル内での関係性であり、さらにRCOファイル単位でも表示層の優先順位は存在する。
2. 階層構造を持つ場合、子要素以下は親要素以上から一部の属性の値やアニメーション効果を引き継ぐ
例えば
<Plane name ="object01" ~以下属性略~ >
<Plane name ="object02" ~以下属性略~ >
</Plane>
</Plane>
のように配置をすると、object01とobject02は親と子の関係になる。
このような関係の時、子要素は親要素の一部の属性値やアニメーション効果を引き継ぐ。
※親子関係を持つことができない要素の組み合わせもある。
一部引き継ぐ属性として
座標(posX posY objectScale)
サイズ倍率(scaleHeight scaleWidth elementScale)と
以下のアニメーション
Fade
MoveTo
Resize
Rotate
による効果が挙げられる。
また親要素の持つ特殊な効果(RCOの外部から受けるもの)も子要素に引き継がれる。
例としては
common_gui.prxで設定したオプションメニューの座標、
ビジーアイコンやUSB接続時データ転送中サインの出現するタイミングなど。
※おそらくはPRXから受けるFade効果だと思われる。
子要素に更に子要素を持たせることもでき、
<Plane name ="object01" ~以下属性略~ >
<Plane name ="object02" ~以下属性略~ >
<Plane name ="object03" ~以下属性略~ >
</Plane>
</Plane>
</Plane>
と配置すると、object03はobject02の子でありobject01の孫という関係になり、
object03は、object01に加え更にobject02からも前述の特性を引き継ぐようになる。
孫の子、ひ孫の子と更に増やしていった場合も、同様に引き継がれていく。
さらに
<Plane name ="object01" ~以下属性略~ >
<Plane name ="object02" ~以下属性略~ >
</Plane>
<Plane name ="object03" ~以下属性略~ >
</Plane>
</Plane>
と配置した場合は、object02とobject03は兄弟の関係となる。
並列ではあるが等しく親であるobject01の一部の属性などを引き継ぐ。
もちろん兄弟要素を複数配置することも可能である。
実例として次のようにPlane要素を配置してみる
<Plane name="object01" posX="-40" posY="0" objectScale="0" redScale="1" greenScale="0" blueScale="0" alphaScale="0.5" width="100" height="100" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onInit="nothing" image="nothing" displayMode="0x0">
<Plane name="object02" posX="40" posY="0" objectScale="0" redScale="0" greenScale="1" blueScale="0" alphaScale="0.5" width="100" height="80" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onInit="nothing" image="nothing" displayMode="0x0">
<Plane name="object03" posX="40" posY="0" objectScale="0" redScale="0" greenScale="0" blueScale="1" alphaScale="0.5" width="100" height="60" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onInit="nothing" image="nothing" displayMode="0x0">
</Plane>
</Plane>
</Plane>
この場合、画面上では次の画像のように表示される。
object01は子要素にobject02を持ち、更に孫要素にobject03を持つという関係であるため、
object02はobject01の一部属性を引き継ぎ、
object03はobject01とobject02の双方の一部属性を引き継ぐことになる。
この場合、サイズ倍率は全て等倍、その他の影響もないため実質的に引き継がれるものはX座標のみ。
object01のX座標が-40なので、object02のX座標は40だが親であるobject01の-40を引き継いで0となる。
object01、object02のX座標を引き継いだobject03のX座標は40で変わらないが、計算上は -40+40+40=40 である。
また、配置はobject01、object02、object03 の順なので、object01が最下層、次にobject2、最上層にobject03が表示される。
3. 全てのオブジェクトはPage要素の子要素以下として配置する
実際のObjectTree内部では並列にPage要素が配置され、その子要素以下としてその他の要素が配置されている。
それ以外の場所にオブジェクトを移動、配置しても画面上に表示されることはない。
これは各Page要素が特定の状況に応じて表示されるという特性を持っていて、その特性を子要素以下が引き継いでいるためと考えられる。
つまり
<ObjectTree>
<Page01>
その他の要素
</Page01>
<Page02>
その他の要素
</Page02>
</ObjectTree>
というような構成になっていて、それを崩さずに編集、追加していけばよい。
どのRCOのどのPageがどのような状況で表示されるかについては各 RCO の役割を参照のこと
Page要素同士は兄弟関係であるため、ObjectTree内であれば配置順序を入れ替えても問題はない。
ただしその場合は表示される層の順序も入れ替わることになる。
AnimTreeの編集
AnimTree内で使用される要素は
1、Recolour、MoveToなどのアニメーション効果を付加するタイプの要素
2、Delay、FireEventなどの補助的な役割を持つ要素
3、それらをひとつのグループとしてまとめるAnimation
の三種類がある。
1、2の要素を組み合わせ、Animation要素の子要素として配置するというのが基本構成となる。
1はObjectTree内の要素を指定する属性を持っていて、効果が及ぶ対象を選ぶことができる。
3は名称の属性を持っていて、ObjectTree内の要素がもつOnInit属性などにリンクすることで実際に動作する。
2,3の要素は前に配置された要素から優先的に実行される。
- 最終更新:2011-06-04 00:04:58