スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
公開: --年--月--日, カテゴリ: スポンサー広告

Rcomageガイド(10) 対応バージョンの異なるテーマの移植

皆さんはお気に入りのテーマのアニメーションを別のテーマなどに移植したいと考えたことはありますか? 国内で見かけたことはありませんが、海外では色々なテーマのいいとこ取りしたようなRemixテーマがちょくちょくリリースされています。最近Endlass Paradigmのメンバーからあるテーマで使われているアニメーションを別のRCOへ移植したいというヘルプメッセージを受けました。RCOをそのまま使い回すのではなく特定の要素のみをピックアップするのは手間が掛かるぶん若干敷居が上がりますが、コツを掴めばあまり難しくありませんので、ポイントとなるところをまとめておこうと思います。説明の内容はRCOファイルにおけるXML編集経験があることを前提としているので、説明はある程度端折っていきます。

更新: 2011-05-13

何を移植したいのかはっきりさせる

別表1: CTF形式のカスタムテーマでの変更例
USBモード (kara_box theme)PSP™について (ADA theme)
kara_boxテーマのUSBモードでの画像ADAテーマのAbout PSPでの画像

まずはどのアニメーションを移したいか絞り込みましょう。例えばUSBモードのアニメーションだとか、PSPについて(About PSP)のアニメーションの一部分だけであるとかなどのことです。

追加されている要素の確認

オリジナルのXMLファイルと見比べてどの要素が追加されているものかをチェックしておくと後々ラクになります。この段階ではとりあえずどれが追加されているものかが確認できればOKです。

Page要素の特定

抽出したいアニメーションに関連する要素がObjectTree要素内のどこにあるかを調べます。ObjectTree要素内ではPage要素をひとかたまりのブロックとして見る事ができます。上で例に挙げたアニメーションだと「USBモード」も「PSP™について」もRCOは同じsysconf_plugin.rcoでPage要素はそれぞれ以下のとおりです。

別表2: 『USBモード』に関連する記述
USBモード関連のXMLファイル内での記述

別表2で示しているとおり、『USBモード』に関連するオブジェクトはPage[name="page_usb_mass_storage_mode"]以下にある。

別表3: 『PSP™について』に関連する記述
About PSP関連のXMLファイル内での記述

別表3で示しているとおり、『PSP™について』に関連するオブジェクトはPage[name="page_psp_config_about_psp"]以下にある。

Animation要素の特定

Page要素を特定できたら次はAnimation要素の特定を行ないます。そのPage要素内にある全ての子要素のonLoad属性の値を見てonLoad="nothing"以外の記述を抜出します。onLoad属性の値はonLoad="nothing"以外では必ずonLoad="anim:foo"という記述が先頭にくるので、エディタの検索機能を利用すれば難なく全て拾うことができるでしょう。

ObjectTree内の関連する要素の特定

Animation要素を特定したら今度は逆にObjectTree要素内の特定作業に戻ります。Animation要素内で指定されているオブジェクト名称を全て抜出し、検索機能でObjectTree要素内の該当する要素にチェックを入れていきます。

関連するリソースの特定

イメージ・テキスト・モデルデータが使われているものは全てチェックして抜出しましょう。ここでも検索機能が活躍します。以下の要領で特定・抜出しをしましょう。

イメージデータ
文字列image:で検索し関連するものをImage要素から抜出す
テキストデータ
文字列text:で検索し関連するものを外部ファイルから12言語分全て抜出す
モデルデータ
文字列model:で検索し関連するものをModelTreeから抜出す

特定した要素を全てコピーする

特定した全ての要素を移植先にコピーします。ObjectTree以外はそのままコピーすればいいですが、ObjectTree内の要素はどこにコピーするか間違えないようにしましょう。例をいくつか挙げます。

例1: 壁紙の上へ表示させたい
対象となるRCOファイルはsystem_plugin_bgです。対象となるPage要素はPage[name="page_wallpaper_theme"]です。そのPage要素の子要素のPlane[name="wallpaper_theme_plane"]の子要素としてコピーしましょう。
例2: 音量調整時に表示させたい
対象となるRCOファイルはimpose_pluginです。対象となるPage要素はPage[name="page"]です。そのPage内のGroup[name="volume"]の子要素としてコピーしましょう。
例3: PSストアーのトップページのみに表示させたい
対象となるRCOファイルはstore_browser_plugin.rcoです。対象となるPage要素はPage[name="top_page"]です。そのPage要素内の好きな箇所にコピーしましょう。ただし、既存の要素の子要素としてコピーするのは非推奨です。どのRCOファイルのどのPage要素内にコピーするかの見極めを間違えない事が重要です。場所の見極めは初めてだと分からなくて当然なのである程度の勘が頼りになります。分からない時はとりあえずやってみて上手くいくまで試してみてください。

注意点

Page要素ごとコピーしないこと
Page要素は別の外部ファイル(moduleなど)を参照しているため、追加しても効果が現れません。Page要素を丸ごとコピーすると子要素以下も全て認識されなくなるので注意しましょう。
既存の要素はそのまま移植しないこと
一部にPage要素と同じく外部ファイルを参照しているものがあるので、コピーするときはname属性を変更しておいた方が無難です。また、たまにonLoad属性にnative系のeventが設定(例 onLoad="event:native/:onPage_init")されていることがありますが、他のRCOで使う場合は忘れずに削除しておきましょう。そのままでも不具合は無いですが紛らわしいので。
特殊な要素は使わない方がいい
List要素系やButton要素などは外部ファイル参照型要素で何らかのeventが設定されています。新規追加しても表示されなかったりして効果がありません。利用できるのはPlane要素, Text要素, ModelObject要素, Group要素くらいだと思います。ただしGroup要素の使用は推奨しません。Plane要素での代替をお勧めします。

例外

onLoad属性の記述がPage要素をまたがっている、またはonLoad属性以外にevent記述がされているために、関連する要素の特定が難しいものもあります。ですが現在公開されているテーマの大部分は今回紹介した方法で対応できますのでそれについての説明は省きますが、検索機能を使って地道に絞り込んでいけば必ず特定できるでしょう。

長々とした説明でしたが、要は慣れです。要領をつかめば簡単なものなら数分でできるようになるので頑張ってください。機会があればまたそのうち実例を挙げて説明してみたいと思います。

公開: 2010年08月22日, カテゴリ: Rcomageガイド