Progression4(ベータ版)でPRMLLoaderを使うには
※Progression4(正式版)でPRMLLoaderの仕様が一部変更されました。下記の方法よりも、よりスマートに実装出来るようになってるのでこちらを参考にして下さい。
Progression4では仕様変更により今までのお作法が通用しない部分が結構あって、PRMLLoaderもその一つ。最近はPRMLからシーン構成を生成するので解決法をずっと探ってたんだけど、ようやく動作したのでメモ。同じとこで詰まってる人がいたら参考にしてみて下さい。
ポイントは以下の3つ。
1、PRML内で設定するシーンクラスをあらかじめ宣言しておく(25~26行目)
→ 宣言してないとエラーが出る。
2、親クラスを呼び出すときに第1、第2引数をnullにしておく(34行目)
→ 通常はsuper(“index”, IndexScene, new WebConfig());となるが、PRMLをつかってシーンを生成すると全部自動で設定してくれるため、ここで宣言したidとPRMLで自動宣言されるidが重複してしまいエラーが出る。
3、PRMLLoaderクラス内のmanagerを使う(45~56行目)
→ ここが一番の鬼門。PRMLLoaderを使ってシーン構造を生成した場合はPRMLLoader.managerに展開される。なので「外部同期機能」や「最初のシーンに移動」とかを下記のようにしてしまうと別管理のmanagerとして動作してエラーが出る。
manager.sync = true; manager.goto(manager.syncedSceneId);
この3つのポイントをまとめると、ドキュメントクラスは以下のようになる。
Index.as
package {
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 flash.events.Event;
import flash.net.URLRequest;
import jp.progression.loader.PRMLLoader;
/**
* ...
* @author ...
*/
public class Index extends CastDocument {
//PRMLで使うシーンクラスを宣言
IndexScene;
MyScene;
/**
* 新しい Index インスタンスを作成します。
*/
public function Index() {
// 自動的に作成される Progression インスタンスの初期設定を行います。
// 生成されたインスタンスにアクセスする場合には manager プロパティを参照してください。
super( null, null, new WebConfig() );
}
/**
* SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
*/
protected override function atReady():void {
var pl:PRMLLoader = new PRMLLoader(stage, new URLRequest("xml/prml.xml"));
pl.addEventListener(Event.COMPLETE, function(e:Event):void
{
pl.removeEventListener(Event.COMPLETE, arguments.callee);
// 開発者用に Progression の動作状況を出力します。
Debugger.addTarget(pl.manager);
// 外部同期機能を有効化します。
pl.manager.sync = true;
// 最初のシーンに移動します。
pl.manager.goto(pl.manager.syncedSceneId);
// prml.xmlの内容
trace("prml="+pl.manager.root.toXMLString());
});
}
}
}
prml.xml