Case study of Progression. vol.2
はいどうも。前回のvol.1が割と需要あったようなので、vol.2のモチベーションがまだあります。
今回は分かってる人にとっては、当たり前のようなtipsになってしまうかもしれませんが、
ProgressionのコアであるSceneの推移についてのお話です。
難しく考えすぎている方もいらっしゃるようなので、シンプルに考えられるように心がけます。
SceneEventには、onLoad, onDescend, onInit, onUnload, onAscend, onGotoと、6つのイベントが用意されています。
そしてこれをうまく使うことこそがProgressionの利にもつながるわけです。
とはいえ、6つのイベントを覚えなきゃいけないのかぁ。メンドイなぁと思うと思います。
そんな方に朗報。最初は onLoadとonUnload だけ覚えれば大丈夫です。
というか、大概のサイトはこの2つで作れるんじゃないかという位、その2つが重要です。
まぁでもせっかくあるので使いたいので、わかりやすく図にしてみました↓。

図の中に緑の部分がありますが、これは一旦棚に上げて解説します。赤と黒だけ見てください。
onLoadはそのシーンに親側から来た時に最初に発生するイベントです。
その後、そのシーンで止まる場合はonInit。通過する場合はonDescendが発生します。
onUnloadはそのシーンから親側へ推移していく時に最後に発生するイベントです。
子供からそのシーンを通過して親へ向かうときはonAscend、そのシーンが出発点で親へ向かう場合はonGotoが発生します。
で、そのあとにonUnload。
というわけで、簡単に言うとonInitとonDescendはonLoadに含まれて、onGotoとonAscendはonUnloadに含まれていると言えます。(※緑は例外)
ですから、プログラミング的には onLoadにonInitとonDescendの共通処理を書き、分岐する必要があるときだけonInitとonDescendを使えばいいわけです。
逆方向で言うと、onUnloadにonGotoとonAscendの共通処理を書き、分岐する必要があるときだけonGotoとonAscendを使えばいいわけです。
というわけで、僕がコーディングするときは、ほとんどonLoadとonUnloadばっかり使います。たまに、onInit、onGoto、onDescend辺りを使う感じです。onAscendに関しては使ったことないです。(onUnloadに書いて終わり)
最後に棚に上げといた緑の部分についてです。
これはもう例外と考えましょう。以下のようにonGotoとonInitは使う時に、以下のように分岐処理を書けば良いです。
protected override function _onGoto():void {
if (sceneId.contains(progression.destinedSceneId) {
//緑
}else {
//赤
}
}
protected override function _onInit():void {
if (sceneId.contains(progression.departedSceneId) {
//緑
}else {
//赤
}
}
[...] その2つ以外はあんまり使わないって「むらけん」さんが言ってる。 キャストのメモ。 [...]
[...] 参考になる記事 http://fladdict.net/blog/2008/11/progression_study1.html http://humming.via-kitchen.com/2008/04/05/progression-lecture-memo/ http://www.muraken.biz/blog/2009/06/02/case-study-of-progression-vol2/ [...]
[...] あとはMurakenさんのエントリとか、gihyoのnorthprintさんのエントリが分かりやすいです。 だいたいはMurakenさんのエントリの通り、atSceneLoadとatSceneUnloadでいけたりします。atSceneInitとatSceneGoto [...]
[...] しましょう、当たり前ですが。 下記サイトに書かれているとおり基本”onLoad“と”onUnload“という考え方が良さそうです。 http://www.muraken.biz/blog/2009/06/02/case-study-of-progression-vol2/ [...]