Flashの今さら人に聞けない初歩的な何かをみんなで勉強する大阪ひよこの会。
その第三回「シーン遷移とは?」を開催しました。
シーン遷移と言えばFlashの画面展開として最も重要な部分。
FlashサイトからFlashゲーム、Flashアニメに至るまで、必ずといっていいほど考えなくてはいけない部分です。
必ずぶち当たる問題なのに、ほとんど直接作品とは関係ない部分でもありますし、かといってこれまた必ず制作の途中段階で変更を余儀なくされる部分でもあります。
なので本来の作品性に関係ない部分を出来る限り省力化をしながら作らないといけないし、かといって出来る限り柔軟に作っておかないと作品の作り込みに影響するという、ほぼ全てのFlasherのジレンマとして君臨し続けているのではないでしょうか(言い過ぎか)。
そんなシーンに対する、僕たちひよこたちの方法とは?
僕はProgressionのシーン遷移の部分に焦点を当てて(本来僕はProgressionの目玉を大きく三つにわけて、シーン遷移、キャスト、コマンドとしています。今回はそのシーン遷移の部分)、技術的なお話はおいておいて「何故Progressionを使うのか」についてお話しさせて頂きました。
ほとんど資料無しのお粗末な内容ですが、皆様ご静聴ありがとうございました!
「本やネットにある情報だけど、あえて口頭で説明した方がわかりやすいな」みたいな内容も交えてたので、ブログに残せるほど有意義な情報はありませんでしたが、一旦レポートしておきたいと思います。
そもそも何故Progressionを使うのか
Progressionとは何かをあえて間違って定義してみる
Progressionとかフレームワークとか、何かをインストールしないといけないとか勉強しないといけないとか、一旦難しい事はおいておいて、シーン遷移だけに限って言えばProgressionはとても便利なクラスライブラリと考えていいと思います。
クラスライブラリというのは、AS3を書く方なら一回は使ったことがあると思いますが、Tweenerとか、ああいったような、誰かがあらかじめ作ってくれたとても便利なクラスということになります(誰かが、とか言い回し失礼します)。
AS1やAS2しか触ったことがなくても、色を変えるColorとか時間を計算するDateとかあれもクラスですので、やはり一回は使ったことあると思うんです。
ですので、誤解を恐れずあえて極端なことを言うと、「Progressionのシーン遷移も、Dateなどのクラスと一緒なのだから、使い始めるのに何も特別なことはない」と言えると思います。
Progressionに対して抱いている(おそらく必要以上に)高い敷居を下げるためにあえて極端なお話をしましたが、この方法が正しいかどうかはわかりませんが、もちろん最終的には公式ページや技術書などでしっかりと理解することをお勧めします。
Progressionは難しい?
Progressionのシーン遷移は難しいか?いいえ簡単です。
難しいのはシーン遷移のほうです。
僕は長年シーン遷移に悩まされてきました。
最初は簡単なgotoAndPlayの分岐にはじまり、attachmovieやaddChildなどのアクションスクリプトに頼り、デザインパターンやMVCを引っ張り出しても完璧なものができませんでした(その原因の全てはデザパタやMVCが悪いんじゃなくて僕自身のスキル不足にあります)。
将来的な作り込みを見越して柔軟性に富んだ作りにしたつもりが、使いにくいAPIとスパゲッティな内部を持ったゴミの固まりみたいなのが出来たり、全く想定してなかった箇所に変更が入って作り直しを余儀なくされたり…。思い出すだけでも胃に穴が空きそうです(苦笑)。
そういった、「シーン遷移の難しさ」を簡単にしたものがProgressionのシーン遷移なのです。
ここは誤解でも極論でもないです。
具体的に知りたいProgressionのシーン遷移のこと
Progressionのシーン遷移で重要なクラスは
SceneObjectです。
(注意:公式のASDocのフレームに直リンク張っています)
このSceneObjectの主に四つの関数を呼ばれるタイミングを駆使するだけで複雑なシーン遷移をコントロールします。
その4つとは
atSceneGoto()
シーンから出発したときに呼び出される関数。
atSceneLoad()
シーンが読み込まれたときに呼び出される関数。
atSceneInit()
シーンが到着したときに呼び出される関数。
atSceneUnload()
自分より上の階層のシーンに移動して、自分が必要なくなったときに呼び出される関数。
です。
こちらも公式サイトに直リンクを張っていますので詳しくはリンク先でお調べ下さい
(注意:フレーム内に張っています)。
これについては、どの解説書でも丁寧に説明がなされています。
詳しくはそういった技術書で身につけることをお勧めしますが、まずはひよこのとっかかりとして口頭でこれらがどういった動きをするかを会では説明させて頂きました。
慣れないうちはとくにatLoadとatInitの使い分けに苦しんだ記憶がありますが、
それでも複雑なシーン遷移をこの4つの関数が呼び出されるタイミングで処理するやり方はとても理にかなったものなので、慣れれば多階層シーンの移動の際に、
atLoadはメモリの初期化など
atInitは描画処理など
atUnloadeでメモリの解放など
というようにうまく使い分けることで破綻せずシーン遷移が楽に行えるようになるかと思います(注意:ここに書かれてあるのは必ずしもatLoadでメモリの初期化をしないといけない、ということではないです)。
さいごに
まいどまいど長いばっかりで中身のないブログ内容で本当ごめんなさい。
基本的には技術的な検証あんまりしないし文章も推敲しないし自分の駄文レポートなので、読んでくださってる方には毎回申し訳ない気持ちで一杯です。
まあそんなありがたくも申し訳ない心情をつらつらと書いてても仕方がないので話を進めますと、あのあと帰ってから次の日にぎっくり腰になりまして、ただいま寝返りも打てない状態で安静中です(笑)。
ぎっくり腰になったきっかけというのも、ゴホンゴホンと咳き込んでいたらいきなりぐきっといったという地上最弱生物の名をまたしてもほしいままにしてしまいましたw
ひよこの会も僕が幹事とはいえあんまり何もしてない派なので、いつも細やかに仕切ってくださるひろゆきさんはじめ皆さんのご協力あって成り立っています。お忙しい中、ご協力もご参加も本当に感謝です!
「初歩的な質問をする会」なので、決して上級者お断りではないので、初心者も上級者もいろんな「いまさらな話」でみんなで盛り上がれたらと思います。
かといって「ひよこの会と聞いたけど自分ばかりが初心者でまわりがとてもレベルが高く感じた。こんな初歩的な質問していいのか迷った」という方が居ましたら、それこそまさしく初歩的な質問ですのでどしどし参加してくださいね!
僕ももうちょっと緊張しないようにやっていきますので、これからもよろしくお願いします。