(なかなかレアケースかもですが)
Progressionでディープリンクを有効にし、URL同期したいんだけど、
有るシーン以下では同期させたくない!。
なんて場合の方法です。
先日twetterで@alumican_net さんや @soundkitchen さんが「SWFAddressの値を偽装すればいいんじゃね?」的な事をおっしゃていたのですが、
「あ、なんか俺には無理そうw」と思い、放置していたのです。
が、wonderfl,jsdo.it Meetup #1で @nium さんに直接質問した所「もう一個Progressionインスタンス作ってsync=falseにすればいいですよ」と教えていただきましたー。
サンプル
なるほどそれならできそうだ。と思って作ったサンプルはこちら。
SCENE1以下のページは常にURLがscene1になります。
実装ポイント
IndexSceneクラスの中で普通に「Scene1クラス(SceneObject)」を作って、
それをProgressionインスタンスコンストラクタ引数に渡して、syncをfalseにします。
(これをシーン1のIndexクラスとします)
1
2
3
| //IndexScene.as
_scene1_Index = new Progression( "scene1", container, Scene1 );
_scene1_Index.sync = false; |
Scene1クラスのコンストラクタで、「シーン1用のindexSceneクラス」を作ります。
atSceneLoadで、「シーン1のIndexScene」に遷移させ、
atSceneUnloadで、「シーン1のIndex状態」に戻してます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| //Scene1.as
public function Scene1( name:String = null, initObject:Object = null ) {
super( name, initObject );
title = "scene1";
_scene1_IndexScene = new Scene1_IndexScene( "scene1_indexScene", {"title":"scene1_indexScene"} );
addScene( _scene1_IndexScene );
}
protected override function atSceneLoad():void {
addCommand(
new Goto(new SceneId("/scene1/scene1_indexScene"))
);
}
protected override function atSceneUnload():void{
addCommand(
new Goto(new SceneId("/scene1"))
);
} |
データ一式
データ一式をアップしておきます。
以上、もっと効率のよい作り方があるかもしれないので誰かしってたら教えてぇ(;´Д`)