カテゴリー : Progression

Progression 4 メモ -CastButton のカレント設定について-

CastButton 内で manager に ProcessEvent.PROCESS_COMPLETE をリスナー登録し、そのリスナー関数内で現在の sceneId と自身に設定された sceneId を比較して判別する。

[ example ]

override protected function atCastAdded():void
{
	//~~~ 色々な処理 中略~~~

	manager.addEventListener(ProcessEvent.PROCESS_COMPLETE, _onProcessComplete);
}
private function _onProcessComplete(event:ProcessEvent):void
{
	// 自身がただの外部リンクボタンだった時のための処理
	if(sceneId == null) return;
	
	// ここで判定
	if(manager.current.sceneId.toString() == sceneId.toString()) {
		// カレント設定の処理
	}else {
		// カレント設定解除の処理
	}
}
(ver 3.xx の時は、manager を progression に変更すれば ok)

Progression なぐり書き

以下、個人的なメモ。(シーン移動するボタン周りのやつ)

//次のシーンへ
var prog:Progression = getProgressionById("index");
var _goto:Goto = new Goto(prog.current.next.sceneId);
_goto.execute();

//前のシーンへ
var prog:Progression = getProgressionById("index");
var _goto:Goto = new Goto(prog.current.previous.sceneId);
_goto.execute();

//出発地のシーンの親
trace(progression.departedSceneId.clone().transfer("../"));
//目的地のシーンの親
trace(progression.destinedSceneId.clone().transfer("../"));

//シーン移動中の処理
progression.addEventListener(ProcessEvent.PROCESS_START, _onProcessStart);
private function _onProcessStart(e:ProcessEvent):void{
	e.target.removeEventListener(ProcessEvent.PROCESS_START, _onProcessStart);

	//シーン移動イベント中に、さらにシーン移動イベントが実行されないようにイベント削除してやったり
}

//シーン移動完了の処理
progression.addEventListener(ProcessEvent.PROCESS_COMPLETE, _onProcessComplete);
private function _onProcessComplete(e:ProcessEvent):void {
	e.target.removeEventListener(ProcessEvent.PROCESS_COMPLETE, _onProcessComplete);

	//シーン移動イベント再登録してやる
}

Progression CastButtonのcurrent設定 (2)

なにやらコチラのエントリのアクセスが割とあるみたいなので、具体的なソースを簡単に補足しておきます。
初見の方は、上記のエントリを参照の上、ご閲覧ください。




■CastButton の current を設定する

//コンストラクタ等に記述
sceneId = new SceneId( "/bar" );
addEventListener(CastEvent.STATUS_CHANGE, _sceneChange);
//ここまで


//シーンが変わったときに実行
private function _sceneChange(e:CastEvent):void {
	
	//到達地点が、sceneId と同じもしくは sceneId の子シーンだった時は処理 A 、それ以外は処理 B
	//例えば、目的地が "/bar/foo" だった場合、そこは sceneId の子シーンなので処理 A が実行される
	if (isCurrent || isChild) {
		//処理 A
	}else {
		//処理 B
	}
}



※もしドメインが nbhd6119.com と表示されていましたら、お手数ですが http://boondockradio.net/ に変更をお願いします。また、もし RSS をご登録いただいておりましたら、こちらも再登録をお願いします。

Progression CastButtonのcurrent設定

CastButton を extends した MyCastButton があったとする。
ロールオーバー、ロールアウト設定はテンプレートに組み込まれているので分かりやすいのですが、current設定で少し躓いたので備忘録。

■現在のシーンかどうかの判定はisCurrent(Boolean)で取得できる。
■シーンが変わったときは CastEvent.STATUS_CHANGE が送出される。

上記二つを使ってごにょごにょすればok。
ロールオーバー時と current 状態で同じのにする場合、ロールアウトイベントとかその辺にも注意が必要かな。

以上!


【追記】
isParent で current の親かどうか、isChild でcurrent の子かどうか、isVisited で訪れたことがあるかどうかを判定できるみたいです。



こっちのエントリに簡単なサンプルソース書きました。

Progression flashvarsからデータを受け取る

Progressionは index.html に preloader.swf を貼り付け、 preloader.swf に index.swf を読み込んでいます。
この index.html の中には(正確にはprogression.js) flashvars というプロパティがあり、ここに値を入れてあげると swf でそれを受け取れます。
これはPHPでXMLのURLを渡すときなんかでよく使います。

■ index.html

<script type="text/javascript">
// <![CDATA[
	progression.embedSWF( {
		- 中略 -
		flashvars:{
			xmlUrl : "hogehoge.xml"
		},
		- 中略 -
	} );
// ]]>
</script>

■ index.as
var _param:Object;
_param = LoaderInfo(MovieClip(stage.getChildAt(0)).loaderInfo).parameters;

trace(_param.xmlUrl);
//出力 --- hogehoge.xml

てな感じでアクセス。
MovieClip(stage.getChildAt(0)) が preloader.swf のことです。
それの loaderInfo の parameters に入ってます。

注意事項としては、Flash Tracer でも入れてブラウザで確認しなければ出力されません。
Flashで書き出した段階ではたぶん null が返ってきます。

以上!

ProgressionでXML読み込んだり

こんなXMLがあったとする。

hoge.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<data>
<img title=”foo1″>hoge1.png</img>
<img title=”foo2″>hoge2.png</img>
<img title=”foo3″>hoge3.png</img>
<img title=”foo4″>hoge4.png</img>
<img title=”foo5″>hoge5.png</img>
</data>

IndexScene等のonLoadの中

var img_arr:Array = new Array();//画像のURL入れるやつ
var title_arr:Array = new Array();//画像のタイトル入れるやつ

addCommand(
	//xml読み込むよ
	new LoadURL(new URLRequest("hoge.xml")),
	new Func(function():void {
		var xml:XML = new XML(this.latestData);
		var xmlList:XMLList = new XMLList(xml.img);
		for each(var element:XML in xmlList) {
			img_arr.push(element);
			title_arr.push(element.@title);
		}
	})
);

こんな感じで非常に楽ちん。
LoadURLクラスって便利だなーと思った。

※ブラウザ直書きのため、なにかしらエラーが出るかも?

Progressionのアップデートについて

<条件>
3.08から3.09以上に自動アップデートしたとき

<現象>
ファイルがごっそり消えて焦る

<原因?>
自作クラスをmyprojectフォルダのいたるところに入れていたのが原因っぽい?
(それらはProgressionのクラスをextendsしていない)

<解決?>
最新版のProgressionプロジェクトパブリッシュして、アップデートしたいプロジェクトのlibフォルダをごっそり入れ替える。
これでswf書き出してみると、動作も正常でバージョンが3.1.2になっていたのでアップデートできたのかな。

んんんん、消化不良。

Progression メモ2

別にたいしたことじゃないけど、ページタイトルの設定について。

IndexScene(rootのScene)のコンストラクタに
this.title = “ページタイトル”;

これでページタイトルが
ページタイトル | シーン名
になる。
以上!

Progression メモ1

windowのRESIZEイベントとか、castButtonのイベントにはDoTweener使わない方がいいっぽい。
前者は、windowを大きくしたり小さくしたりを繰り返していると、15秒後にタイムアウトエラーが出てくる。
後者は、例えばcastSpriteの子にするとして、castSpriteの_onCastAddedで出現アニメにDoTweenerを登録し、castButtonの_onCastRollOverにDoTweenerでアニメーションをつけたとする。
この出現アニメ中にロールオーバーすると、やはりタイムアウトエラーが出てくる。

回避策としてDoTweenerじゃなくて、普通にTweenerをimportして使ってみるとこういったエラーは出なくなった。
が、果たしてこれで本当にいいのかは不明・・・。
どなたかへるぷみー!


[追記]
initObject に {timeOut : 0} を渡してやればタイムアウトエラーは出なくなる。
(これは Command クラス全体に言える)

Progression便利すぎ!

あったら便利だなーって機能がそろってるので、作業時間が大幅に削減されてみんなハッピー!
僕も最初は半信半疑だったけど、使ってみてからというもの宝くじは当たるわ、ねんがんのアイスソードは手に入るわ、もうウハウハ!ということは一切ないのですが、もう手放せません。

で、現在更新の止まってしまった表のページをリニューアル中です。
年内にできればいいなー・・・。

Return top