michinoko blog

Information

date: 2010/01/29
category: flash.

Progression 4.0.1 Public Beta 1.3でのPRMLLoader

僕はProgression3からPRMLLoaderを使ってシーン構成を生成することが多いいのですが、Progression4になって仕様が変わり、こちらのブログを参考にさせて頂いて使っていたのですが、Public Beta 1.3になってどうもディープリンクが上手く作動していないことに気付く。Public Beta 1.2までは大丈夫だったとにと思い、twitterでつぶやいてみると、nium先生からご教示が!!

結論から言うと、PRMLLoaderには、autoGotoというプロパティーがあって、デフォルトでtrueとなっているので、PRMLLoaderで読んだprml.xmlに自動的に移動する→そのあとディープリンクのシーンに移動するという処理になるようで、IndexSceneのatSceneDescend()を通らずに、自動遷移するatSceneInit()を通るとのこと。今までの認識で書いて2重に書いていたみたい。

_prml.autoGoto = false;

としたら無事直りました。nium先生ありがとうございます。
とりいそぎcreateFromXMLを使ってシーン構成を生成したんやけど、PRMLLoader、createFromXML、addSceneFromXMLの使い分けがまだよくわかっておらず。flabakaさんの「PRMLLoaderとaddSceneFromXMLの使い分け」に書かれているように、「一気に全シーンを作成したい場合はPRMLLoader。任意の(シーンの)子シーンを作成したい場合は、addSceneFromXMLを使うのかな? と個人的に思っています。」ということみたいですけど。そうなるとcreateFromXMLはどうなんでしょ?すごい人誰か教えてくださいw。
あっコメントは最近スパムが多くなったので切っちゃったのでtwitterなりなんなりで出来たらお願いします(__)いいかげんこのブログもデザインしなければと思いつつ。。。

僕はProgression4でもPRMLLoaderを使っていこうかと思っているのですが、せっかくcreateFromXMLも使ってみたので、汚いソースですが晒しておきます。正しい使い方かどうかもわかりませぬが;

package michinoko {
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import jp.progression.Progression;

	import jp.progression.casts.*;
	import jp.progression.commands.display.*;
	import jp.progression.commands.lists.*;
	import jp.progression.commands.net.*;
	import jp.progression.commands.tweens.*;
	import jp.progression.commands.*;
	import jp.progression.config.*;
	import jp.progression.data.*;
	import jp.progression.debug.*;
	import jp.progression.events.*;
	import jp.progression.scenes.*;

	import michinoko.scenes.*;

	/**
	 * ...
	 * @author michinoko
	 * @see http://blog.inasiantime.com/
	 * @email michinoko[a]inasiantime.com
	 * @version 1.0.0
	 * @date created 2010.01.29
	 *	createFromXMLを用いてシーン構造を読み込む
	*/
	public class Index extends CastDocument {
		//PRMLで使うシーンクラスを宣言
		IndexScene;
        TestScene;

		private var _xmlLoader:URLLoader;
		public function Index() {
			// 自動的に作成される Progression インスタンスの初期設定を行います。
			// 生成されたインスタンスにアクセスする場合には manager プロパティを参照してください。
			super( null, null, new WebConfig() );
		}

		/**
		 * SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
		 */
		override protected function atReady():void {
        	//PRML形式のxmlを読み込む
			_xmlLoader = new URLLoader();
			_xmlLoader.addEventListener(Event.COMPLETE, onXMLloaded);
			var urlReq:URLRequest = new URLRequest("xml/myscene.xml");
			_xmlLoader.load(urlReq);
		}
		//xmlを読み込んだらcreateFromXMLを使いシーン構造を生成して遷移
		private function onXMLloaded(e:Event):void {
			var xmlObj:XML = new XML(_xmlLoader.data);
			var manager:Progression = Progression.createFromXML(stage, xmlObj);
			manager.sync = true;
			manager.goto(manager.syncedSceneId);

		}
	}
}