addSceneFromXMLでXMLからシーン作成

| コメント(0) | トラックバック(0)

このエントリですが、実は1週間くらい暖めちゃってました。
なんか考えがまとまらないまま忙しくなっちゃいまして。

このままだとどうにもならんなと思ったので勢いでサンプル作って公開します。

とりあえずサンプル見てもらって。。。

デザインは全く考えないで作ったのでそのへんは勘弁してもらうとして、
今回はprogressionフレームワークのaddSceneFromXMLです。

これはXMLファイルからシーン構造を作れてしまうというシロモノで、ギャラリーサイトとかスライドショーとかの作成に大活躍間違い無しの超便利メソッドです。
今回のサンプルはこれで作っています。5シーンあるんですが、自分で作ったクラスファイルは3つです。

まず、用意するXMLですが、
上記サンプルのXMLはこんな感じになってます。

<?xml version="1.0" encoding="UTF-8" ?>
<prml version="2.0.0" type="text/prml">
    <scene name="image1" cls="myproject.ImageScene">
        <caption>imageその1</caption>
        <imageurl>image1.jpg</imageurl>
    </scene>
    <scene name="image2" cls="myproject.ImageScene">
        <caption>imageその2</caption>
        <imageurl>image2.jpg</imageurl>
    </scene>
    <scene name="image3" cls="myproject.ImageScene">
        <caption>imageその3</caption>
        <imageurl>image3.jpg</imageurl>
    </scene>
    <scene name="image4" cls="myproject.ImageScene">
        <caption>imageその4</caption>
        <imageurl>image4.jpg</imageurl>
    </scene>
    <scene name="image5" cls="myproject.ImageScene">
        <caption>imageその5</caption>
        <imageurl>image5.jpg</imageurl>
    </scene>
</prml>

上記のようなprml形式のXMLを用意する事により、動的なシーン作成が可能となります。
sceneタグのnameがシーン名となります。
上記サンプルではclsでクラスを指定していますが、これは自分でシーンのクラスを指定したい時に設定します。
sceneクラスの要素(captionとかimageurl)はシーンオブジェクト.sceneInfo.dataで取得出来ます。

このXMLをシーンを追加したい場面で読み込みます。
今回はいきなりIndexシーンでシーン追加してシーン1に飛ばすという事をしていますのでIndexシーンに以下記述

protected override function _onLoad():void {
    //xml読み込み
    var _XMLLoader:URLLoader = new URLLoader(new URLRequest("scenedata.xml"));			
    _XMLLoader.addEventListener(Event.COMPLETE, xmlLoadComp);
}
private function xmlLoadComp(e:Event):void {
    var _xmlLoader :URLLoader = URLLoader(e.target);
    var _xmlString:XML = new XML(_xmlLoader.data);	
    //シーン構造を作成
    progression.root.addSceneFromXML(_xmlString);
    //サンプルはここでパラレルリスト作ってます
    //ボタンの作成
    for (var i:int = 0; i < this.numScenes; i++) {
    省略
    }
    //最初のシーンへいきなり移動
    progression.goto(this.scenes[0].sceneId);
}

これでOK。
上記サンプルではシーンオブジェクト.numScenesも使用しています。これは当該シーンの子シーンの数を取得する時に使用します。詳細はドキュメント参照して下さい(←逃げ)

実は今回サンプルの場合、progressionインスタンスを丸ごと作成してくれるPRMLLoaderの方を使用した方がスマートなんですが、こっちの方が自分的には実用度が高いので、サンプル作ってみました。

このサンプル作るのに1時間くらいかな(色々ドキュメント読みながらだし)。むしろエントリ書く方が時間がかかるという。。。

サンプルのソースをプロジェクトごと置いておきます。
ロードの処理とか全く書いてないし、そのままでは全く使い物になりませんが、この前エントリしたCastSpriteで包んだCastButtonとか入ってますので色々と参考になれば。。
むしろ添削してもらいたい!!

これでいいのか?っていう書き方も満載ですし。。。
あと無駄にCastLoaderとかも使ってます。。。ロード処理書いてないのに。

トラックバック(0)

トラックバックURL: http://www.northprint.net/mt5/mt-tb.cgi/108

コメントする

このブログ記事について

このページは、northprintが2008年10月 2日 22:10に書いたブログ記事です。

ひとつ前のブログ記事は「Progression3でそうめんのThreadCommandを使う場合」です。

次のブログ記事は「XMLUtil.xmlToObjectでXMLListを楽々扱う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。