<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>宇都宮ウエブ制作所 &#187; Progression</title>
	<atom:link href="http://utweb.jp/blog/archives/tag/progression/feed" rel="self" type="application/rss+xml" />
	<link>http://utweb.jp/blog</link>
	<description>宇都宮さんっていう、夫婦でやってるウエブサイト制作請負の大阪下町家内製手工業業務日誌</description>
	<lastBuildDate>Thu, 02 Feb 2012 14:35:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/tag/progression/feed" />
		<item>
		<title>大阪ひよこの会でやった内容を少し</title>
		<link>http://utweb.jp/blog/archives/986</link>
		<comments>http://utweb.jp/blog/archives/986#comments</comments>
		<pubDate>Mon, 07 Mar 2011 05:22:49 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[セミナー]]></category>
		<category><![CDATA[勉強会]]></category>
		<category><![CDATA[飲み会]]></category>

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

		<guid isPermaLink="false">http://utweb.jp/blog/?p=910</guid>
		<description><![CDATA[いきなりですがswcファイルって「スウィック」って読むらしいですね。アドビの中の人もそう読んでたんで確かな情報です。
しかしながら僕は慣れなくていつも「エスダブルシー」って読んでしまうんですね。そこらへんのモサさが自分流 [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_911" class="wp-caption alignnone" style="width: 276px"><a title="SWC書き出し" href="http://utweb.jp/blog/wp-content/uploads/2010/10/51700dd1ba12bada0e02bb945011cba5.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/51700dd1ba12bada0e02bb945011cba5-266x300.png" alt="中段あたりにチェックボックスがあるよ" title="SWC書き出し" width="266" height="300" class="size-medium wp-image-911" /></a><p class="wp-caption-text">中段あたりにチェックボックスがあるよ</p></div>
<p>いきなりですがswcファイルって「スウィック」って読むらしいですね。アドビの中の人もそう読んでたんで確かな情報です。<br />
しかしながら僕は慣れなくていつも「エスダブルシー」って読んでしまうんですね。そこらへんのモサさが自分流さ、なんて無頼を決め込んで今日も「エスダブルシーエスダブルシー」と 読んでいます。<br />
僕が「エスダブルシー」って言う度に周りが若干イラっとした顔されるんですが、それでもかわまず「エスダブ…エスダボースィー」とか呼び続けてるのに未だ怒られた事がないのは 、ひとえに僕の人徳だと思います。</p>
<p>無駄な軽口はこのくらいにして、先日行われたひよこの会で少しだけ要望があったのでSWCと連携してProgressionでのFlashサイト開発環境を超快適にする方法をご紹介したいと思います。<br />
今までのやり方にもよりますが、体感100倍速いと言っても全くおおげさでないくらい、爆速開発が可能になりますよ！<br />
<span id="more-910"></span></p>
<h3> そもそもパブリッシュが遅い…</h3>
<p>Progressionに限らずですが、Flashサイトを作っていて一番のネックになるのが「パブリッシュに時間がかかる」事なんですよね。<br />
それもflaファイルが肥大すればする程パブリッシュに時間がかかるようになり、納品間近の追い込みの時期になるにつれてパブリッシュだけで1分以上かかるようになるし…（ヒーッ）。</p>
<p>デバッグなんかもそうですが、「よりわかりやすく、より気持ちよく」動くことを心がけているFlashサイトにとって、1pxの位置や0.1秒の速度までこだわってなんべんも動かしてみて作り込むことはよくあることなのに、パブリッシュに時間がかかるようになるとそれもままなりません。</p>
<h3>書き出せるものは先に書き出しておけば…</h3>
<p>そこで今回ご紹介するswcなんですが、これは言ってしまえば頻繁に変更しない素材はあらかじめswc形式で書き出しておいて 、それを使うことによって開発を進めていこう、という方法なんですね。<br />
この方法自体は、僕もkatapadさんから教えて頂きました。<br />
ちなみに僕というひよこ向けの備忘録なので、最初はswcとは何か、どうやってswcを書き出すのかなどの事が書かれてありますが、Progression連携のミソは一番最後なので、swc書き出しに精通されてる方はこのまま最後まですっ飛ばして読まれてもいいかもしれません。</p>
<h3>ものには順序がある。まずはFlashBuilderとProgressionを連携させるようにしておく</h3>
<p>僕の現在のFlash開発環境は100％FlashBuilder+Progressionなので、その方法でご説明します。<br />
基本的なところは同じなので他の開発環境 でも工夫してswc連携スタイルが作れることと思います。</p>
<p>まずは僕の以前の記事<br />
<a href="/blog/archives/815" target="_self">Progression4をいい感じにFlashBuilderで作業できるようにする </a><br />
を参考にしてください。<br />
これはFlashBuilderがsrcにあるflaファイルを勝手にbin-debugフォルダにコピーしてしまう現象を回避できなかったので、思い切ってflaファイルを削除してそれでもちゃんとswfがパブリッシュできるように設定し直した方法ですが、基本的にこのスタイルで開発を進めていくことになります。</p>
<p>記事に沿って、index.flaとかpreloader.flaを思い切って捨てちゃって下さい。次に進みます。</p>
<h3>新規flaファイルを作る</h3>
<p>FlashCS5の「ファイル」→「新規」から新規flaファイルを作ります。Progressionと連携させるのでASのバージョンはもちろんAS3です。<br />
僕はFlashBuilder連携を前提にこの記事を書いていますんで、今回FlashCS5指定ですがFlashDevelopとかFDT、FlexBuilderなどお使いの環境に合わせて読まれてる方にとっては、特にFlashCSのバージョンは関係はありません。</p>
<p>新規flaファイルの保存場所はどこでもかまいません。どこでもかまいませんがFlashBuilderのワークスペース以外のところに作るのがおすすめです。flaファイルのファイル名も何でもいいですが、ここでは<strong>material.fla</strong>と名付けました。</p>
<h3>SWCファイルを書き出す</h3>
<div id="attachment_912" class="wp-caption alignnone" style="width: 160px"><a title="おやこんなところにSWC書き出しのチェックが！" href="http://utweb.jp/blog/wp-content/uploads/2010/10/bad291777fba55d2fb440901354724a7.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/bad291777fba55d2fb440901354724a7-150x150.png" alt="おやこんなところにSWC書き出しのチェックが！" width="150" height="150" class="size-thumbnail wp-image-912 " /></a><p class="wp-caption-text">おやこんなところにSWC書き出しのチェックが！</p></div>
<p>そのままFlashの「ファイル」→「パブリッシュ設定」で真ん中らへんに「SWC書き出し」というチェックボックスがあるので、ここにチェックを入れます。<br />
そのままパブリッシュしたらflaファイルと同じフォルダに「material.swf」が出来たと思います。</p>
<div id="attachment_913" class="wp-caption alignnone" style="width: 160px"><a title="swcファイル書き出し" href="http://utweb.jp/blog/wp-content/uploads/2010/10/61f5826cf97f3819d29b2e1895fddeb9.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/61f5826cf97f3819d29b2e1895fddeb9-150x150.png" alt="おやこんなところにSWCファイルが出来ちゃった！" title="swcファイル書き出し" width="150" height="150" class="size-thumbnail wp-image-913 " /></a><p class="wp-caption-text">おやこんなところにSWCファイルが出来ちゃった！</p></div>
<h3>material.flaのライブラリの中はリンケージ書き出しのシンボルでいっぱい！</h3>
<p>さてさて、これでswc書き出し用のflaファイルが新規作成できましたので、早速作業に入っていきましょう。<br />
基本的にはmaterial[素材]というファイル名からも想像がつくように、このflaファイルの役割は「<strong>素材倉庫</strong>」です。長年慣れ親しんできたflaファイルをただの素材倉庫にするのは僕もしのびないですが快適環境作りのため。最終的にはFlash全体の開発環境が快適になることによって自然とこのflaファイルの活躍の場も以前より増してきますのでご心配なく！</p>
<p>最終的にライブラリの中にたくさんリンケージ書き出しのシンボルが作れました。</p>
<div id="attachment_915" class="wp-caption alignnone" style="width: 160px"><a title="ライブラリの様子" href="http://utweb.jp/blog/wp-content/uploads/2010/10/d9ec38aebee13f49f0a6f2382e344fc1.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/d9ec38aebee13f49f0a6f2382e344fc1-150x150.png" alt="ライブラリの中は血と汗と夢で一杯" title="ライブラリの様子" width="150" height="150" class="size-thumbnail wp-image-915  " /></a><p class="wp-caption-text">ライブラリの中は汗と涙と夢でいっぱい！</p></div>
<h3>書き出したSWCファイルをProgression開発環境にコピーする</h3>
<p>この記事ではProgression開発環境イコールFlashBuilderのワークスペースな意味合いで使っています。<br />
先ほど書き出したswcファイルを早速Progressionの開発環境で使ってみましょう。</p>
<p>具体的にはProgression開発環境のlibというフォルダに先ほどのswcファイルをコピーするだけで良いです。</p>
<div id="attachment_916" class="wp-caption alignnone" style="width: 310px"><a title="swcをlibフォルダに持ってきた" href="http://utweb.jp/blog/wp-content/uploads/2010/10/727373cc45b1639f577f17f80ce4d8c7.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/727373cc45b1639f577f17f80ce4d8c7-300x181.png" alt="わかりにくくてすみません。スクリーンショットでは800_material.swcとリネームされていますが特に意味はないです。" title="swcをlibフォルダに持ってきた" width="300" height="181" class="size-medium wp-image-916" /></a><p class="wp-caption-text">わかりにくくてすみません。スクリーンショットでは800_material.swcとリネームされていますが特に意味はないです。 </p></div>
<h3>たったこれだけ！</h3>
<p>FlashBuilder+Progression環境だと、この「swcをlibフォルダに入れる」だけであとは何もせずにswcの中にあるリンケージをそのままクラスとして読み込めるようになります！</p>
<div id="attachment_917" class="wp-caption alignnone" style="width: 310px"><a title="自動的に使える！" href="http://utweb.jp/blog/wp-content/uploads/2010/10/63251d6e1ca21681db35b6288b5ca9f3.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/63251d6e1ca21681db35b6288b5ca9f3-300x178.png" alt="快適すぎて死ぬｗｗｗ！" title="自動的に使える！" width="300" height="178" class="size-medium wp-image-917" /></a><p class="wp-caption-text">快適すぎて死ぬｗｗｗ！</p></div>
<p>他の環境だとクラスパスの設定とかしないといけないかもしれないですが、本来はひよこ的には「クラスパスって何？」ってところから記事を書きたいところなのですが今回の記事ではそれは割愛して、まあ他の環境でよくわからない場合は本番開発用flaと同じフォルダにswcファイルも入れておけば同じような感じにはなるかと思います。</p>
<h3>まじで便利なコンポーネント連携！</h3>
<p>さてさて、ここまでは普通にswc書き出しとの連携なんですが、Progressionが凄いのはここからなんです。</p>
<p>とちょっとそのまえにProgressionのAddChildコマンドについて少しお話を…。</p>
<p>FlashのActionScript3では、表示オブジェクトを画面上に入場/退場させる命令としてaddChildとremoveChildがあります。<br />
Progressionではそれをさらに便利にしたjp.progression.commands.displayパッケージがあって、ようはわかりやすく言うとAddChildコマンドやRemoveChildコマンドっちゅうのがあります。<br />
（他にもAddChildAtコマンドやRemoveAllChildrenなどなどいろいろ便利なコマンドもありますが、ややこしくなるのでこの記事では一律AddChildコマンド、RemoveChildコマンドと呼ぶことにします）<br />
ただ便利なだけでなく、Progression側で何が表示されてて何が退場していったのかの管理とか、それこそ重なり順とか、表示されたときに実行される処理とか、かなりProgressionの根幹に関わる処理が、このAddChild系コマンドの実行されたタイミングで行われています（いるような気がします）。<br />
なのでAddChildコマンドを使わずにaddChildだけで表示した場合、これがProgressionが管理しきれない表示オブジェクトとなってしまうので、使ってる経験上こういうのが思いがけずちょっとしたトラブルを招くことが多いです。</p>
<p>Progression始めた人で、僕が個人的にはまりやすいなと思うのが、この部分なので、例えばCastSpriteやCastMovieClip系の表示オブジェクトをAddChildコマンド経由せずにふつうにflashの addChildで表示させてしまってatCastAddedが正しく実行されないなどのミスで戸惑っている人がいるんじゃないかなと思っています。</p>
<p>swc連携に限ったことではないですが、Progressionでは特に初心者の場合でAddChildコマンドが何しちょるのかようわからん、といった場合はパフォーマンスを稼ぐなどの特別な理由がない限りはaddChildは使わずほぼ全てAddChildコマンドを使うようにしよう！と決めておくとそこらへんのミスが減るんじゃないかと僕は思います。</p>
<p>で、少し脱線したんで本題に戻りますが、とにかく<strong>ProgresisonのAddChild系コマンド、RemoveChild系コマンドはコンポーネントとも連携が利く</strong>ので、ここからが本領発揮です。</p>
<p>Flashの強力なタイムライン機能を活かしてInOutMovieコンポーネントでわしわしアニメーション描くもよし！</p>
<div id="attachment_919" class="wp-caption alignnone" style="width: 310px"><a title="InOutMovieコンポーネント" href="http://utweb.jp/blog/wp-content/uploads/2010/10/4b6b4a199c7c595116aa3c4e9c835218.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/4b6b4a199c7c595116aa3c4e9c835218-300x191.png" alt="複雑なアニメーションもInOutMovieコンポーネントで思いのまま！" title="InOutMovieコンポーネント" width="300" height="191" class="size-medium wp-image-919" /></a><p class="wp-caption-text">複雑なアニメーションもInOutMovieコンポーネントで思いのまま！</p></div>
<p>ボタンなんかもRollOverButtonコンポーネントでさくさく！</p>
<div id="attachment_920" class="wp-caption alignnone" style="width: 310px"><a title="RollOverButtonコンポーネント" href="http://utweb.jp/blog/wp-content/uploads/2010/10/40bde7fe2c065055784fb82c79febede.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/10/40bde7fe2c065055784fb82c79febede-300x196.png" alt="どうせswcの中に素材としてボタン置いてるんだからついでにコンポーネントでボタン化までしておいてしまえ！" title="RollOverButtonコンポーネント" width="300" height="196" class="size-medium wp-image-920" /></a><p class="wp-caption-text">どうせswcの中に素材としてボタン置いてるんだからついでにコンポーネントでボタン化までしておいてしまえ！</p></div>
<h3>new AddChildするだけの簡単なお仕事</h3>
<p>あとはリンケージさえ設定してもらえれば、あとはプログラム側ではnew AddChildするだけの簡単なお仕事です。本当に。<br />
ビジュアルとロジックの分離は当制作所でも必須課題なのですが、Progression導入でそこらへんも本当にやりやすくなりました。タイムラインでしっかり作り込みたいところはタイムラインで作って、Tweenerなどでぴっちり制御したいところはロジックを作って、それらの違いを意識せずに最終的に扱えるようになるのは、本当にパワフルな開発環境を整えることが出来ます。</p>
<p>この記事中、ほとんどが僕の無駄口で長くなってしまいましたが、実際はやってみると本当に簡単なので是非試してみて下さいね！<br />
デメリットとしては先ほど書いたように今まで慣れ親しんだflaファイルをただの素材置き場としてしか使わなくなる事への心の抵抗くらいですが、最終的にはFlashのタイムラインというパワフルな環境を十二分に発揮できるスタイルに移行するわけなので、かえって以前よりFlashCS5の出番が増えるようになります。<br />
「もっとこうしたほうがいいよ」とか「うちではこうしてるよ」ですとか、「うそばっかりやんけ！」などのご意見ありましたらコメント下さいね。<br />
最近「ブログ読んでます」という反応が少しだけ得られるようになって、本当嬉しいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/910/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/910" />
	</item>
		<item>
		<title>Progression 4 Flashフレームワーク入門ノート発売！</title>
		<link>http://utweb.jp/blog/archives/834</link>
		<comments>http://utweb.jp/blog/archives/834#comments</comments>
		<pubDate>Mon, 19 Jul 2010 11:47:19 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=834</guid>
		<description><![CDATA[著者である大重美幸様より、2010/7/17に発売したばかりの「詳細！Progression 4 Flashフレームワーク入門ノート」（クリック先はアマゾンで買う）を献本いただきました！
著者である大重様、発送いただいた [...]]]></description>
			<content:encoded><![CDATA[<p>著者である大重美幸様より、2010/7/17に発売したばかりの「<a href="http://amzn.to/cV5b54" target="_blank">詳細！Progression 4 Flashフレームワーク入門ノート</a>」（クリック先はアマゾンで買う）を献本いただきました！</p>
<div id="attachment_836" class="wp-caption alignnone" style="width: 234px"><a title="Prog4入門ノート！" href="http://amzn.to/cV5b54" target="_blank"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_bok-224x300.jpg" alt="俗に言う「大重本」　この写真はクリックするとアマゾンへ" title="Prog4入門ノート！" width="224" height="300" class="size-medium wp-image-836" /></a><p class="wp-caption-text">俗に言う「大重本」この写真はクリックするとアマゾンへ</p></div>
<p>著者である大重様、発送いただいたソーテック社様、この場をお借りしてお礼申し上げます。</p>
<p>献本していただくなんていう体験、僕自身の人生の中でそうあることでもないのでものすごくうれしいです。ましてやAS3を覚えるときに相当お世話になった大重さんからとなっては、これはもう本気でレビューするしかありません！！<br />
僕も業務フレームワークとしてProgressionをがっつり使っている人間の一人として、また実際に自分が入門の時にどこでつまづいたのかとかも思い出しながら、かなり突っ込んでレビューしたいと思います！<br />
考えてみれば本のレビューなんてそんなにやったことがなくて、もしかしたらかなりとんちんかんなことになるかもしれませんが、少しでも皆さんのほんの購入時の参考になればと思います。がんばります。</p>
<p><span id="more-834"></span></p>
<h3>最初の印象</h3>
<p>基本的には、AS3入門書で有名な「詳細！ActionScript3.0入門ノート」と雰囲気が一緒で前ページ青と黒の二色刷。<br />
チャプター1でProgression4の基礎をひととおり習った後は、Proression4をフルパワーで使うためにほぼすべてのチャプターでクラススタイルでの説明になります。<br />
なのでメインとなる読者の対象としては「詳細！ActionScript3.0入門ノート」などでAS3をある程度入門した方、といったところでしょうか。<br />
技術書である以上、専門用語やスクリプトもよく出てきますが同じように画面写真も豊富なので、特に難解な印象は受けません。<br />
多くの人が入門書を手にするとき「この本は自分のレベルにみあった入門書か」を気にすると思いますが、何をもって簡単そうとか難しそうと印象するのかは人それぞれですので、このへんは先もいったようにAS3入門ノートの雰囲気と一緒なのでそちらを読まれたことがある方はそれを参考にするといいでしょう。</p>
<div id="attachment_839" class="wp-caption alignnone" style="width: 310px"><a title="prog_book_0" href="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_book_0.jpg"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_book_0-300x224.jpg" alt="入門ノートの名に恥じない、細やかな操作手順。こっから先の写真はクリックすると拡大します。" title="prog_book_0" width="300" height="224" class="size-medium wp-image-839" /></a><p class="wp-caption-text">入門ノートの名に恥じない、細やかな操作手順。こっから先の写真はクリックすると拡大します。</p></div>
<h3>目次ごとの感想</h3>
<p>全部でチャプター７まであります。</p>
<ul>
<li>チャプター1：Progression4の基礎
<ul>
<li>Progressionとは何なのかの説明に始まり、インストールから各プロジェクトの作成方法、さらにはコンポーネントスタイル、タイムラインスタイル、クラススタイルの3つのスタイルで実際にHelloWorldを表示させるまでが説明されています。<br />
このチャプターでひとまず全体にわたって動かしてみて、徐々に順を追ってこれから学習を進めるという構成になっているようです。</li>
</ul>
</li>
<li>チャプター2：シーンツリーの基本パターン
<ul>
<li>Progressionの肝のひとつである「シーン」についてかなり詳細な説明がされています。<br />
シーンの概念は、HTMLでいう「ファイル（ページ）」と同じく場面を構成する1単位なわけです。ほとんどの場合シーン構造がそのままサイトマップになりますので、このシーンの概念にチャプターをまるまる一つ費やして説明されているのはかなりわかりやすいと思いました。</li>
</ul>
</li>
<li>チャプター3：シーンの移動とシーンイベント
<ul>
<li>シーンの構造が理解できたら、次はいよいよシーンの移動を行います。<br />
このへんからスクリプトの記述が多くなってきます。<br />
<div id="attachment_844" class="wp-caption alignnone" style="width: 310px"><a title="prog_book_1" href="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_book_1.jpg"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_book_1-300x224.jpg" alt="ぱっと見でくじけそうになる人も！" title="prog_book_1" width="300" height="224" class="size-medium wp-image-844" /></a><p class="wp-caption-text">ぱっと見でくじけそうになる人も！</p></div><br />
もしかしたらスクリプトに慣れていない方はこのへんから難しく感じるかもしれません。でも、大重さんの本（というかプログラミング技術書全般）には読み方のコツがあって、長いスクリプトの中でも重要なのは1行だけだったりするので、あとのほうにその重要な1行を抜き出してちゃんと説明されてあるんです。<br />
<div id="attachment_846" class="wp-caption alignnone" style="width: 310px"><a title="prog_book_2" href="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_book_2.jpg"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/prog_book_2-300x224.jpg" alt="ちゃんと重要なところを抜き出して説明してくれる！" title="prog_book_2" width="300" height="224" class="size-medium wp-image-846" /></a><p class="wp-caption-text">ちゃんと重要なところを抜き出して説明してくれる！</p></div><br />
なので長いスクリプトが苦手な方も、そこを読み飛ばして後から書かれてある重要なところだけを注目していけばいいのでそういう読み方をすれば安心です。<br />
シーンの移動に関してですが、前章でわざわざシーン構造だけを一章使って学習したことが活きてきます。シーン構造さえわかってしまえばProgressionは「前のシーンへ」「次のシーンへ」「上のシーンへ」「いきなり孫のシーンへ」などという便利なシーン移動がいろいろとできるので、この章はその移動方法が書かれただけですので一見スクリプトが多くてややこしいそうに見えますが、コツさえわかってしまえば易しいと思います。</li>
</ul>
</li>
<li>チャプター4：コマンドとコマンドリスト
<ul>
<li> ここから本の厚み的に後半に向かいます。<br />
コマンドもProgressionの機能の中核をなす技術の一つですが（ちなみにほかには、さっきやった「シーン」と次にやる「キャスト」）、配列を用いたSerialListとParalelListの入れ子など、かなり実践的な機能の紹介まで踏み込んで説明されています。<br />
あと173ページの虫がかわいいです。</li>
</ul>
</li>
<li>チャプター5：キャストオブジェクトを利用する
<ul>
<li>この章は全体から見るとさらっと流されているようにも見えますが、先ほどもいいましたようにProgression三本柱のひとつ（キャスト）について学習できます。<br />
僕が特に重要だと感じたのが、本で言うと185ページあたりに実際のFlashのムービークリップからCastMovieClipを作るやり方でして、これを知らないと多くの人が入門できたはいいけど実際のサイト作るにはどうしたらええのん？ってなっちゃうと思うんです。なのでこの説明からもこの本がより実践向けに書かれてあるんだなあと重ね重ね感じたのでした。</li>
</ul>
</li>
<li>チャプター6：外部ファイルの読み込みとプリロード
<ul>
<li> FlashのActionScriptの中でも特に難しいと感じる人が多いのが「外部ファイルの読み込み」だと思うんですが、Progressionはそこを比較的簡単に扱うことができます。<br />
簡単とはいっても、Progressionなりの書き方を覚えないといけないのはそれはもう仕方がないので、この章で勉強します。<br />
一括読み込みやリソース管理や先読み機能など、覚えるのも難しいけど自分で作るともっと難しい、つまり是非とも覚えて使いこなしたいかなり便利な機能もあります。<br />
こういった機能を、じっくり読みながら学習が進められるのも本ならではですね。</li>
</ul>
</li>
<li>チャプター7：さらに進んだ使い方
<ul>
<li>フルフラッシュサイトのディープリンク機能についてのつまづきやすい点の説明やカスタムコマンドなど基本的な機能をさらに突っ込んだ使い方からSWFをそのままシーンとして読み込む、リキッドレイアウトなどの夢のような機能までひととおり学習できます。<br />
ここまで読めば、もうProgression4の機能はひととおり学習したと言えますし、実際にFlashサイト制作に投入してもかなりの部分で応用できるようになるでしょう。</li>
</ul>
</li>
</ul>
<h3>総評</h3>
<p>気になった点としましては、たとえば82ページなどの「contentloaderInfo.bytesTotal」と「contentloaderInfo.bytesLoaded」など、説明ページの英数字が<del datetime="2010-07-19T12:11:35+00:00">半角全角がどちらかに統一されていないところでした。</del>文字の間隔がそれぞれ違うので少し見づらい点でした。見づらいのは説明文だけで、見たところソースコードなどは大丈夫だったので、問題はないんですがちょっと気になるな、というところです。<br />
<span style="font-size:0.9em">※大重さんより、半角全角統一されていないんじゃなくて、半角で統一されているけど均等割り付けで文字幅が広がっているとの事でした。長い単語を途中で改行しないようにするとどうしてもこうなってしまうらしいです。</span><br />
それ以外に関しては先ほどから繰り返し言ってきた言葉なんですが、この本はProgression4の機能紹介だけにとどまらず、実際に使う側の立場としてどう学習していけば本当にFlashサイトが作れるのかを突き詰めた「<strong>かなり実践的で使える参考書</strong>」だと感じました。<br />
僕の周りでも「Progression4の機能や出来ることについてはわかったし、今までも本やネットで基本的な作り方も学べたけど具体的に自分のFlashサイトでどう適用して良いのかわからない」といった声を多く聞きました。「<a href="http://amzn.to/cV5b54" target="_blank">詳細！Progression 4 Flashフレームワーク入門ノート</a>」は機能紹介から一歩踏み込んだ、まさに使えるようになるための入門ノートとして最適ではないでしょうか。<br />
Flashの開発環境はCS3/CS4/CS5にまたがって対応している点もありがたいですね。<br />
今日からでもこの本読みながら学習したことを仕事に投入していきます！</p>
<p>最後に、僕自身がProgressionのファンであり大重さん本のファンでもあるので、こんな僕のつたないレビューですが皆さんの購入の判断にちょっとでもお役に立てれば幸いです。</p>
<p>あ、あと本の中身の写真に関しては著作権を侵害しないよう最大限配慮したつもりですが、もし至らない点などありましたらお知らせください。</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/834/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/834" />
	</item>
		<item>
		<title>Progression4をいい感じにFlashBuilderで作業できるようにする</title>
		<link>http://utweb.jp/blog/archives/815</link>
		<comments>http://utweb.jp/blog/archives/815#comments</comments>
		<pubDate>Wed, 07 Jul 2010 15:01:29 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashBuilder]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=815</guid>
		<description><![CDATA[FlashBuilderはじめてみました。正宗です。
Progression4がFlashBuilderとの連携ができるようになっていたのがきっかけだったのと、あとFlashのコンパイル（パブリッシュ）がその都度グラフィ [...]]]></description>
			<content:encoded><![CDATA[<p>FlashBuilderはじめてみました。正宗です。</p>
<p>Progression4がFlashBuilderとの連携ができるようになっていたのがきっかけだったのと、あとFlashのコンパイル（パブリッシュ）がその都度グラフィックを書き出し直すので時間がかかるようになったのが嫌でグラフィックはあらかじめswc書き出ししておいてFlashBuilderからasだけをコンパイルできるようになったらいいなと思ったので、FlashBuilderを使いこなせるように勉強してみることにしました。</p>
<p>常々お伝えしているように、うちのFlash請負制作業務のほぼ100%をProgressionフレームワークを使用していますので、ProgressionとFlashBuilderがうまいこと連携できていないと困ります。いろいろ試してみてうまい感じに連携できるようになったので書いておきたいと思います。</p>
<p>あとFlashBuilderについての本や情報が多いですがだいたいがFlex技術者向けになっていて、MXMLとか僕もよくわからないのですが僕のやりたいFlash開発とは微妙に違う気がするので、Flash向けにFlashBuilderの設定方法なんかの情報があっても良いなーと思っていたので、今回の記事はProgressionとあわせて是非ともマスターしたい技術だと思います。</p>
<h3><span id="more-815"></span>先ずはFlashを立ち上げて</h3>
<p>最初はFlashを立ち上げてProgressionプロジェクトを作成するところからはじめます。</p>
<div id="attachment_816" class="wp-caption alignnone" style="width: 310px"><a title="新規プロジェクトを作成" href="http://utweb.jp/blog/wp-content/uploads/2010/07/d12d66eea7bc86d8b40dee99ab888a4a.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/d12d66eea7bc86d8b40dee99ab888a4a-300x76.png" alt="はじまりはいつもFlash" title="新規プロジェクトを作成" width="300" height="76" class="size-medium wp-image-816" /></a><p class="wp-caption-text">はじまりはいつもFlash</p></div>
<div id="attachment_817" class="wp-caption alignnone" style="width: 310px"><a title="クラススタイル" href="http://utweb.jp/blog/wp-content/uploads/2010/07/d2db931f0a9236b9238e0374210ea9e0.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/d2db931f0a9236b9238e0374210ea9e0-300x233.png" alt="種類：「クラス」にするのを忘れないで！" title="クラススタイル" width="300" height="233" class="size-medium wp-image-817" /></a><p class="wp-caption-text">種類：「クラス」にするのを忘れないで！</p></div>
<div id="attachment_818" class="wp-caption alignnone" style="width: 310px"><a title="FlashBuilderに対応させる" href="http://utweb.jp/blog/wp-content/uploads/2010/07/a0ad78e2cd8f01a66b01028beb29134d.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/a0ad78e2cd8f01a66b01028beb29134d-300x233.png" alt="「FlashBuilderに対応させる」のチェックも忘れるな！" title="FlashBuilderに対応させる" width="300" height="233" class="size-medium wp-image-818" /></a><p class="wp-caption-text">「FlashBuilderに対応させる」のチェックも忘れるな！</p></div>
<p>プロジェクトの設定で気をつけるところはここまでです。<br />
おもむろに「作成」ボタンを押すとしばらくしてProgressionプロジェクトが作成されるはずです。</p>
<div id="attachment_821" class="wp-caption alignnone" style="width: 310px"><a title="プロジェクトが作成された" href="http://utweb.jp/blog/wp-content/uploads/2010/07/82c4df06b28409daa3f1e12876f4d600.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/82c4df06b28409daa3f1e12876f4d600-300x184.png" alt="できたできたー！" title="プロジェクトが作成された" width="300" height="184" class="size-medium wp-image-821" /></a><p class="wp-caption-text">できたできたー！</p></div>
<p>プロジェクトが出来てしまえばもうFlashには用がありません（ひどい）。<br />
Flashはそのまま終了しましょう。</p>
<h3>ここからFlashBuilderで作業する</h3>
<p>ここから先はFlashBuilderで作業します。長年使い慣れたFlashを捨てて慣れないFlashBuilderを使っての作業になりますのでかなりドキドキします。</p>
<p>FlashBuilderのワークスペースの概念はおわかりでしょうか？<br />
もしまだでしたら今後FlashBuilderを使っていくにあたってワークスペースはよく切り替えることになるのでこの記事を読む前に「Eclipse ワークスペース」などで調べておく事をお勧めします。それ以前にFlashBuilderとEclipse との関係についても調べておいて損はありません。<br />
ワークスペースやEclipseについてよくはわかってないけど、手っ取り早くこの記事を読む場合、「<strong>とりあえずワークスペースとは作業フォルダを決める事なので、先ほどProgressionプロジェクトを作成したフォルダーの一階層上を選択しておけば良い</strong>」とだけ覚えておいてください。<br />
（僕の理解度もだいたいそのへんです）</p>
<blockquote><p><span style="color: #ff0000;"><strong> ※</strong>2010/11/10追記</span><br />
最近Dropboxで作業スペースを同期とってるんですが、ワークスペースをDropbox内に設定すると他のPCと同期をとったときにFlashBuilderのライセンス違反が起こるらしく、えらい大変なことになります。<br />
Dropboxなどで共有してる人は、プロジェクトファイルはDropbox上で、FlashBuilderのワークスペースは各PC固有のディレクトリで設定するのがお勧めです。</p></blockquote>
<p>ワークスペースを決めたら、先ほど作ったProgressionプロジェクトフォルダをFlashBuilderに登録します。</p>
<div id="attachment_823" class="wp-caption alignnone" style="width: 310px"><a title="Flexプロジェクトを開く" href="http://utweb.jp/blog/wp-content/uploads/2010/07/d871abcb461ba7b134548c47a5272bbc.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/d871abcb461ba7b134548c47a5272bbc-300x52.png" alt="ファイルメニューから開く" title="Flexプロジェクトを開く" width="300" height="52" class="size-medium wp-image-823" /></a><p class="wp-caption-text">ファイルメニューから開く</p></div>
<p>FlashBuilderのメニュー「ファイル」→「Flexプロジェクトを読み込み」を選びます。</p>
<div id="attachment_824" class="wp-caption alignnone" style="width: 310px"><a title="プロジェクトフォルダーを選ぶ" href="http://utweb.jp/blog/wp-content/uploads/2010/07/23a902f8711d84ba6da65c57dc94d6d5.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/23a902f8711d84ba6da65c57dc94d6d5-300x140.png" alt="プロジェクトフォルダーからさっき作ったフォルダを選ぶ" title="プロジェクトフォルダーを選ぶ" width="300" height="140" class="size-medium wp-image-824" /></a><p class="wp-caption-text">プロジェクトフォルダーからさっき作ったフォルダを選ぶ</p></div>
<div id="attachment_825" class="wp-caption alignnone" style="width: 148px"><a title="読み込み" href="http://utweb.jp/blog/wp-content/uploads/2010/07/bb82949cf87d656aef993ac263abbeb0.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/bb82949cf87d656aef993ac263abbeb0-138x300.png" alt="うまく読み込めた！" title="読み込み" width="138" height="300" class="size-medium wp-image-825" /></a><p class="wp-caption-text">うまく読み込めた！</p></div>
<p>上手く読み込めました！</p>
<p>ただ、ファイル構成をよくよくみてみると、srcフォルダにあるはずのflaファイルがbin-debugフォルダにもコピーされるんですね。このままではまずいですよね。</p>
<p>どうしたらいいかというと解決方法は簡単で、srcフォルダにあるflaファイルを削除すればいいんです。<br />
index.fla と preloader.fla の二つを削除します。</p>
<p>で、Progressionプロジェクトを作った時に自動的に「Index.as」が「bin-debug/index.swf」にパブリッシュされるようにFlashBuilderプロジェクトを設定してくれているんですが、同じように「Preloader.as」ファイルを「bin-debug/preloader.swf」として書き出すようにFlashBuilderプロジェクトを設定し直す必要があります。</p>
<p>他にもFlashBuilderのみでパブリッシュできるようにFlashBuilderプロジェクトの設定をいろいろ変更しておきましょう。</p>
<h3>FlashBuilderプロジェクトの設定をいい感じに設定し直す</h3>
<p>FlashBuilderプロジェクトの設定を変更するには、プロジェクトそのものを右クリックして「プロパティ」を選びます。</p>
<div id="attachment_826" class="wp-caption alignnone" style="width: 269px"><a title="プロジェクトを右クリックで「プロパティ」" href="http://utweb.jp/blog/wp-content/uploads/2010/07/e614e993033d708aa8a01225093edcad.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/e614e993033d708aa8a01225093edcad-259x300.png" alt="プロジェクトを右クリックで「プロパティ」" title="プロジェクトを右クリックで「プロパティ」" width="259" height="300" class="size-medium wp-image-826" /></a><p class="wp-caption-text">プロジェクトを右クリックで「プロパティ」</p></div>
<div id="attachment_827" class="wp-caption alignnone" style="width: 310px"><a title="Flexコンパイラ" href="http://utweb.jp/blog/wp-content/uploads/2010/07/bdff880318ca258df7f18234c4aace5c.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/bdff880318ca258df7f18234c4aace5c-300x227.png" alt="Flexコンパイラでは「HTMLラッパーファイルの生成」のチェックを消す。Hey YO!" title="Flexコンパイラ" width="300" height="227" class="size-medium wp-image-827" /></a><p class="wp-caption-text">Flexコンパイラでは「HTMLラッパーファイルの生成」のチェックを消す。Hey YO!</p></div>
<p>「HTMLラッパーファイルの生成」の<strong>チェックを外す</strong>んですよ。つけるんじゃないですよ。</p>
<div id="attachment_828" class="wp-caption alignnone" style="width: 310px"><a title="Flexモジュールの追加" href="http://utweb.jp/blog/wp-content/uploads/2010/07/3e78bccb1e0b72508a3c4775c2480e21.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/3e78bccb1e0b72508a3c4775c2480e21-300x227.png" alt="Flexモジュールでは追加ボタンを押す" title="Flexモジュールの追加" width="300" height="227" class="size-medium wp-image-828" /></a><p class="wp-caption-text">Flexモジュールでは追加ボタンを押す</p></div>
<div id="attachment_829" class="wp-caption alignnone" style="width: 310px"><a title="モジュールの追加" href="http://utweb.jp/blog/wp-content/uploads/2010/07/3a0b69052ed28d1652683bfd9298cf46.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/3a0b69052ed28d1652683bfd9298cf46-300x169.png" alt="書き出されるswfファイル名の大文字小文字に気をつけて" title="モジュールの追加" width="300" height="169" class="size-medium wp-image-829" /></a><p class="wp-caption-text">書き出されるswfファイル名の大文字小文字に気をつけて</p></div>
<p>「モジュールの追加」画面で気をつける事と言ったら、通常「<strong>P</strong>reloader.as」からは「<strong>P</strong>reloader.swf」が書き出されようとするので、大文字小文字に気をつけることですね。index.htmlを書き換えたくないのであれば、ここで出力SWFのファイル名を「<strong>p</strong>reloader.swf」と小文字に直しておきましょう。<br />
モジュールSWFのサイズは「最適化しない」にしておきましょう。</p>
<p>これでFlashBuilderプロジェクトの設定は完了です。<br />
いろいろ警告が出るとは思いますが、警告文を良く読むとほとんどの方にとっては問題ないケースかと思われますので、理解して問題ないならOK連打で元の作業画面に戻りましょう。</p>
<div id="attachment_830" class="wp-caption alignnone" style="width: 154px"><a title="ファイルを一旦削除してみる" href="http://utweb.jp/blog/wp-content/uploads/2010/07/0f3cb4a2b65b1a51666b2508b0923be9.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/0f3cb4a2b65b1a51666b2508b0923be9-144x300.png" alt="選択したファイルを削除だ！" title="ファイルを一旦削除してみる" width="144" height="300" class="size-medium wp-image-830" /></a><p class="wp-caption-text">選択したファイルを削除だ！</p></div>
<p>あとはsrcのindex.fla 、preloader.fla、bin-debufのindex.swfとindex.fla、preloader.swfとpreloader.flaを削除してみましょう。</p>
<p>そしてFlashBuilderメニューの「プロジェクト」→「クリーン」で一回プロジェクトをやり直して、bin-debugフォルダにflaファイルが出来なくなって、さらにindex.swfとpreloader.swfが作られていればOKです！</p>
<p>あとはがんがん開発するのみ！よいProgression+FlashBuilderライフを！</p>
<h3>おまけ</h3>
<p>MacではFinderからswfを右クリックして「情報を見る」で</p>
<div id="attachment_831" class="wp-caption alignnone" style="width: 139px"><a title="情報を見る" href="http://utweb.jp/blog/wp-content/uploads/2010/07/c98eb53655efd7153d3991a2bdf764de.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/07/c98eb53655efd7153d3991a2bdf764de-129x300.png" alt="「このアプリケーションで開く」を設定" title="情報を見る" width="129" height="300" class="size-medium wp-image-831" /></a><p class="wp-caption-text">「このアプリケーションで開く」を設定</p></div>
<p>「このアプリケーションで開く」で Flash Player Debuggerを選んでおいてね。</p>
<h3>flaファイルは死んでしもうたん？</h3>
<p>このやり方ではindex.flaとpreloader.flaを大胆にも削除してしまうので、今後一切をasファイルで行わなければならなくなります。flaファイルは果たして使えないのでしょうか？</p>
<p>いいえ違います。</p>
<p>flaファイルはswc書き出しをするようにして、プロジェクトフォルダのlibsフォルダに突っ込むようにしましょう。<br />
InOutMovieコンポーネントなどを使ったMCをリンケージ書き出ししておけば、「タイムラインを上手く使いつつ爆速コーディング可能な」Progression4+FlashBuilderというなかなか厨房臭いほど最強なコーディング環境が整うかと思います。</p>
<p>これはかなり万人向けな便利スタイルですので、また今後是非とも掘り下げて紹介したいとおもいますが、swcを駆使してうまいことFlashBulderとFlashとの両立スタイルも研究していきましょう！</p>
<h5>※2010/10/27追記</h5>
<p>さらにswcを駆使して使う方法はこちらの記事に書きました。<br />
<a href="http://utweb.jp/blog/archives/910">SWC+Progressionで快適コーディング生活はじまる！</a></p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/815/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/815" />
	</item>
		<item>
		<title>Progression4でコンポーネントスタイルとクラススタイルを行き来する</title>
		<link>http://utweb.jp/blog/archives/740</link>
		<comments>http://utweb.jp/blog/archives/740#comments</comments>
		<pubDate>Wed, 19 May 2010 15:05:32 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>
		<category><![CDATA[セミナー]]></category>
		<category><![CDATA[勉強会]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=740</guid>
		<description><![CDATA[先日書きました、Progressionのコンポーネントとクラスを混在させるやり方の記事を、コンポーネントスタイルからの視点で書きました。いちおうProgressionのコンポーネントでの作成スタイルを一回でもやった方を対 [...]]]></description>
			<content:encoded><![CDATA[<p>先日書きました、Progressionのコンポーネントとクラスを混在させるやり方の記事を、コンポーネントスタイルからの視点で書きました。いちおうProgressionのコンポーネントでの作成スタイルを一回でもやった方を対象に書いています。もしまだProgressionのコンポーネントスタイルを試されてない方は最初はそっちをやってみないと意味が分からないと思うし、このスタイルが何故必要なのかもわかりにくいかと思います。<br />
それでも一般に誤解されているようにコンポーネントは初心者だけがやるものではなく、こういった工夫一つで非常に表現力の高いサイトを作ることもできるので、ぜひ参考にしてもらってみなさんのProgressonライフに役立てば幸いです。</p>
<h3><span id="more-740"></span>第一章：index.flaをクラスでもコンポーネントでも使えるようにしておく</h3>
<h4>最初はクラススタイルでプロジェクトを作成</h4>
<div id="attachment_743" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 2" href="http://utweb.jp/blog/wp-content/uploads/2010/05/2bfc96a45921677282a36721a07709ca.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/2bfc96a45921677282a36721a07709ca-300x80.png" alt="メニューの「コマンド」→「プロジェクトを作成する」を選ぶ！" title="ピクチャ 2" width="300" height="80" class="size-medium wp-image-743" /></a><p class="wp-caption-text">メニューの「コマンド」→「プロジェクトを作成する」を選ぶ！</p></div>
<div id="attachment_744" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 3_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/b04b0a5e218dada35ca5d8babaa8b9fd.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/b04b0a5e218dada35ca5d8babaa8b9fd-300x233.png" alt="最初、プロジェクトの種類は「クラス」を選んでおく。 プロジェクト名、書き出し先のチェックも忘れずに。" title="ピクチャ 3_on" width="300" height="233" class="size-medium wp-image-744" /></a><p class="wp-caption-text">最初、プロジェクトの種類は「クラス」を選んでおく。 プロジェクト名、書き出し先のチェックも忘れずに。</p></div>
<p>プロジェクトの設定はもう少し続きます。</p>
<div id="attachment_745" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 4_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/a5ed3c871c675da3cfb1fec0a4ca7568.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/a5ed3c871c675da3cfb1fec0a4ca7568-300x233.png" alt="パッケージパスには最初何も書かれていないのでここでは 「classes」と書いておく。 メインクラス名がちゃんと「Index」となっているかも 確認しておく。" title="ピクチャ 4_on" width="300" height="233" class="size-medium wp-image-745" /></a><p class="wp-caption-text">パッケージパスには最初何も書かれていないのでここでは 「classes」と書いておく。 メインクラス名がちゃんと「Index」となっているかも 確認しておく。</p></div>
<p>デフォルトではパッケージパスに何も書かれてないので、ここにとりあえず「classes」と追加。メインクラス名ってところはデフォルトで「Index」ってなってるはずなので、それを確認しておきます。<br />
「FlashBuildefに対応させる」「FlashDevelopに対応させる」も、今は必要ないかもしれませんがとりあえずチェック入れておけば後々便利になります。</p>
<p>以上の設定をチェックしたら「作成する」ボタンを押してプロジェクトを作成してください。<br />
しばらく待った後、書き出し先のディレクトリに自動的にこんな感じのディレクトリ構造が出来上がるはずです。</p>
<div id="attachment_746" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 5" href="http://utweb.jp/blog/wp-content/uploads/2010/05/1f44c9c5972ade339f3e4b2d83d3c1e0.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/1f44c9c5972ade339f3e4b2d83d3c1e0-300x148.png" alt="ここまでひとりで出来てはじめておとな。" title="ピクチャ 5" width="300" height="148" class="size-medium wp-image-746" /></a><p class="wp-caption-text">ここまでひとりで出来てはじめておとな。</p></div>
<h4>クラススタイルで作成されたindex.flaをコンポーネントにしなおす</h4>
<p>プロジェクトを書き出すことは出来ましたが、このままではただのクラススタイルの開発になってしまいます。これをコンポーネントで扱えるように少し手を入れます。</p>
<h4>先ずはドキュメントクラスを削除します</h4>
<p>ステージのプロパティに、ドキュメントクラスを設定するところがあって、Progressionでクラススタイルを選択してプロジェクトを作成すると自動的にここが設定されています。コンポーネントスタイルで動かす場合にはこのドキュメントクラスは必要ないので削除しておきます。</p>
<div id="attachment_747" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 6_on0" href="http://utweb.jp/blog/wp-content/uploads/2010/05/41b7f933648786498ed6a1ae667af5d2.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/41b7f933648786498ed6a1ae667af5d2-300x259.png" alt="ドキュメントクラスを探して！" title="ピクチャ 6_on0" width="300" height="259" class="size-medium wp-image-747" /></a><p class="wp-caption-text">ドキュメントクラスを探して！</p></div>
<div id="attachment_748" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 6_on1" href="http://utweb.jp/blog/wp-content/uploads/2010/05/8397ace09d911eb9f48c49f334e71135.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/8397ace09d911eb9f48c49f334e71135-300x259.png" alt="男なら消すときはためらわず！でもためらって消しても結果は同じ！" title="ピクチャ 6_on1" width="300" height="259" class="size-medium wp-image-748" /></a><p class="wp-caption-text">男なら消すときはためらわず！でもためらって消しても結果は同じ！</p></div>
<p>ステージにコンポーネントを置いていきます</p>
<div id="attachment_750" class="wp-caption alignnone" style="width: 213px"><a title="ピクチャ 7" href="http://utweb.jp/blog/wp-content/uploads/2010/05/564bed646e82e4fa3756c6184c9dede1.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/564bed646e82e4fa3756c6184c9dede1-203x300.png" alt="メニューの「ウインドウ」→「コンポーネント」からコンポーネントパネルを開きます" title="ピクチャ 7" width="203" height="300" class="size-medium wp-image-750" /></a><p class="wp-caption-text">メニューの「ウインドウ」→「コンポーネント」からコンポーネントパネルを開きます</p></div>
<div id="attachment_751" class="wp-caption alignnone" style="width: 218px"><a title="ピクチャ 8" href="http://utweb.jp/blog/wp-content/uploads/2010/05/449343aef116ef2df8df54c34d2f7142.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/449343aef116ef2df8df54c34d2f7142.png" alt="使うのはProgressionConfigのWebConfigとProgressionLoaderのEasyCastingLoaderのふたつです" title="ピクチャ 8" width="208" height="300" class="size-full wp-image-751" /></a><p class="wp-caption-text">使うのはProgressionConfigのWebConfigとProgressionLoaderのEasyCastingLoaderのふたつです</p></div>
<div id="attachment_764" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 18_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/7719ddf4726c1177947bfb08f9bd947e.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/7719ddf4726c1177947bfb08f9bd947e-300x287.png" alt="置きましょう" title="ピクチャ 18_on" width="300" height="287" class="size-medium wp-image-764" /></a><p class="wp-caption-text">置きましょう</p></div>
<p>コンポーネントパネルからWebConfigコンポーネントとEasyCastingLoaderコンポーネントの二つをステージ上にドラッグ＆ドロップして置きます。これらはステージ上のどこに置いてもいいです。SWF時には表示されません。</p>
<h4>コンポーネントを設定する</h4>
<p>いよいよ大詰めです。</p>
<p>コンポーネントインスペクタからコンポーネントの設定を行いましょう。</p>
<div id="attachment_754" class="wp-caption alignnone" style="width: 295px"><a title="ピクチャ 11_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/3080eed3522d0052a6cd8de16e878262.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/3080eed3522d0052a6cd8de16e878262.png" alt="コンポーネントインスペクタを呼び出す鍵はここらへんにあります" title="ピクチャ 11_on" width="285" height="128" class="size-full wp-image-754" /></a><p class="wp-caption-text">コンポーネントインスペクタを呼び出す鍵はここらへんにあります</p></div>
<p>コンポーネントインスペクタとやらの出し方がわからない方は、コンポーネントを選択したときのポロパティウインドウのここらへんのボタンを押してみてください。</p>
<p>先ずはWebConfigコンポーネントから</p>
<div id="attachment_755" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 12" href="http://utweb.jp/blog/wp-content/uploads/2010/05/7943c8b05006ef1ddcdda604c8b4508e.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/7943c8b05006ef1ddcdda604c8b4508e-300x117.png" alt="とりあえずこうなっていればよし" title="ピクチャ 12" width="300" height="117" class="size-medium wp-image-755" /></a><p class="wp-caption-text">とりあえずこうなっていればよし</p></div>
<p>EasyCastingLoaderは次のような感じです</p>
<div id="attachment_765" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 19" href="http://utweb.jp/blog/wp-content/uploads/2010/05/cc621d8f0a994b74e80d6633f1ac1055.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/cc621d8f0a994b74e80d6633f1ac1055-300x179.png" alt="urlのところには恥ずかしがらずに「easycasting.xml」と書こー！" title="ピクチャ 19" width="300" height="179" class="size-medium wp-image-765" /></a><p class="wp-caption-text">urlのところには恥ずかしがらずに「easycasting.xml」と書こー！</p></div>
<p>syncのところは「true」urlのところは「easycasting.xml」と書いておきます。<br />
ここらへんのEasyCastingLoaderコンポーネントの詳しい設定は是非Progression公式サイトのコンポーネントリファレンスをお読みください。</p>
<h4>あとはシーンエディタでシーンを作るのみ</h4>
<div id="attachment_758" class="wp-caption alignnone" style="width: 271px"><a title="ピクチャ 14" href="http://utweb.jp/blog/wp-content/uploads/2010/05/778276101ac939f6d99b983de4db1c8b.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/778276101ac939f6d99b983de4db1c8b-261x300.png" alt="どんな優れた技術でも、残念なサイトを作るのが得意な正宗の手にかかっては形無しだ！" title="ピクチャ 14" width="261" height="300" class="size-medium wp-image-758" /></a><p class="wp-caption-text">どんな優れた技術でも、残念なサイトを作るのが得意な正宗の手にかかっては形無しだ！</p></div>
<p>あとはシーンエディタで自由にシーンを作ってください。ここらへんからは通常のコンポーネントスタイルと全く変わりません。</p>
<div id="attachment_759" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 15" href="http://utweb.jp/blog/wp-content/uploads/2010/05/0e3e4a93e982b22341d34f0b36434aa5.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/0e3e4a93e982b22341d34f0b36434aa5-300x241.png" alt="最後にbin-debugディレクトリにeasycasting.xmlとして保存すればOK" title="ピクチャ 15" width="300" height="241" class="size-medium wp-image-759" /></a><p class="wp-caption-text">最後にbin-debugディレクトリにeasycasting.xmlとして保存すればOK</p></div>
<p>これで最初はクラススタイルとして書き出したプロジェクトをコンポーネントスタイルで開発するように準備ができました。<br />
手順を細かく説明したのでステップ数が多く複雑に見えますが、実際にはちょっとした手間だけで済みます。</p>
<h3>第二章：同じ事をpreloader.flaでもできる</h3>
<p>このテクニックはpreloaderでも使えるので、たとえばindex.flaは普通にクラススタイルで作るけどpreloader.flaはコンポーネントでさくっと作りたい、またはその逆でindex.flaはコンポーネントで作ったけど、いろいろpreloaderのほうであらかじめ処理しておきたいことがあるのでpreloader.flaだけはクラスで作りたい、といったスタイルにも便利に使えます。</p>
<p>やることはindex.flaと同じ考え方です。</p>
<div id="attachment_762" class="wp-caption alignnone" style="width: 284px"><a title="ピクチャ 16_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/b011fe3d3a739ecb2c1aed2d40d618921.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/b011fe3d3a739ecb2c1aed2d40d618921.png" alt="ドキュメントクラスを消して！" title="ピクチャ 16_on" width="274" height="225" class="size-full wp-image-762" /></a><p class="wp-caption-text">ドキュメントクラスを消して！</p></div>
<p>preloader.flaのドキュメントクラスを消しておいて</p>
<div id="attachment_761" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 17" href="http://utweb.jp/blog/wp-content/uploads/2010/05/4e1684c02258f8ad934606cb2b9802bc.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/4e1684c02258f8ad934606cb2b9802bc-300x163.png" alt="こんどはPreloaderコンポーネントをドラッグ＆ドロップします" title="ピクチャ 17" width="300" height="163" class="size-medium wp-image-761" /></a><p class="wp-caption-text">こんどはPreloaderコンポーネントをドラッグ＆ドロップします</p></div>
<p>ステージにPreloaderコンポーネントをドラッグ＆ドロップしておきます。<br />
コンポーネントインスペクタのurlは「index.swf」としておきます。</p>
<p>これで完了です。逆にコンポーネントからクラスにしたい場合は逆の手順でOKです。</p>
<h3>第三章：コンポーネントで作ったキャストに何か処理を加える</h3>
<p>preloader.flaのほうはコンポーネントとクラスを行ったり来たりできると便利だという方が多いのですが、index.flaのほうはこんなややこしいことしておいて何が便利なのかがイマイチわからない、という方も多く居ます。</p>
<p>ただコンポーネントで作っていても何かしらActionScriptの処理が必要になってくるときがあるので、その方法を紹介しておきます。</p>
<h4>基本はInOutMovieコンポーネントを活用する</h4>
<p>キャストには、簡単に扱えてしっかりした画面効果を得られるコンポーネントがたくさんありますが、Flashのタイムラインで実際にアニメーションを味付け出来るInOutMovieコンポーネントを基本にしていくといいでしょう。</p>
<p>InOutMovieも、in点からstop点、stop点からout点の挙動など、今までのgotoAndPlayとはちょっと違った動きをするので最初のうちは戸惑いますが、すぐに慣れてきます。慣れてさえくれば、そのあとはstopひとつ書かなくてもいいInOutMovieでのタイムライン作業が非常に効率がいいものになります。</p>
<h4>やり方１：タイムラインにActionScriptを直接書く</h4>
<p>これはもう、従来のようにタイムラインにActionScriptを書くやり方です。本当に文字通り従来通りのやり方になります。</p>
<p>例）</p>
<div id="attachment_766" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 20" href="http://utweb.jp/blog/wp-content/uploads/2010/05/be5900acb54438b77714b0db0725dab5.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/be5900acb54438b77714b0db0725dab5-300x250.png" alt="いままでどおり普通にタイムラインにActionScript書いてもいいじゃない。変態だもの。" title="ピクチャ 20" width="300" height="250" class="size-medium wp-image-766" /></a><p class="wp-caption-text">いままでどおり普通にタイムラインにActionScript書いてもいいじゃない。変態だもの。</p></div>
<p>よく誤解されがちですが、コンポーネントを使ったからと言ってActionScriptを一切書いてないけないなんて制約はないですし（同じようにクラススタイルだからタイムラインを使ってはいけないという事も無い）、そこはもう、今まで通りやればいいんですよ。変態だもの。みつヲ</p>
<h4>やり方２：せっかくなのでクラスを使ってみる</h4>
<p>AS3のクラスがどうしても苦手な方は、無理してクラスを覚えなくても今まで書いたやり方でもなんとかなるかと思いますが、無理してまでクラスを覚えたらメリットが多いのも事実です。</p>
<p>というかここが醍醐味なので、紹介しておきます。いちおう「カスタムクラスくらいは書ける」方を対象に書きますが、クラスをばりばりかける方も是非ともチャレンジしてほしいテクニックです。</p>
<p>Progressionシーンエディタのメニューから「ツール」→「シンボルを書き出す」で書き出されたキャストには、全て自動的にキャスト名がリンケージとして設定されています。</p>
<div id="attachment_768" class="wp-caption alignnone" style="width: 310px"><a title="ピクチャ 21_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/624f55540023c97de2c8691ab68c33d7.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/624f55540023c97de2c8691ab68c33d7-300x99.png" alt="「ツール」→「シンボルに書き出す」" title="ピクチャ 21_on" width="300" height="99" class="size-medium wp-image-768" /></a><p class="wp-caption-text">「ツール」→「シンボルに書き出す」</p></div>
<div id="attachment_769" class="wp-caption alignnone" style="width: 289px"><a title="ピクチャ 22_on" href="http://utweb.jp/blog/wp-content/uploads/2010/05/478dfba6c551c1d0c250b88267ac1b84.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/478dfba6c551c1d0c250b88267ac1b84-279x300.png" alt="IndexPageというキャストは自動的にIndexPageというクラスにしてもらってる" title="ピクチャ 22_on" width="279" height="300" class="size-medium wp-image-769" /></a><p class="wp-caption-text">IndexPageというキャストは自動的にIndexPageというクラスにしてもらってる</p></div>
<p>Progression以前に、まずFlashの仕様の話なのですが、AS3からのリンケージというのはムービークリップをクラスとして扱うので、Progressionでもキャストというのはクラスで管理していた訳なんです。</p>
<p>つまり、コンポーネントスタイルを使っていて、キャストを使ったことがあるなら、知らず知らずのうちに自動的にクラスを扱っていたということになります。</p>
<p>なので考え方としては今まで自動で使われていたクラスに手を加えてみる、という考え方になります。</p>
<p>試しにflaファイルと同じディレクトリに「IndexPage.as」というASファイルを作って、次のようにクラスを書いてみましょう。</p>
<pre class="actionscript">package<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #0066CC;">MovieClip</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> IndexPage <span style="color: #0066CC;">extends</span> <span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">function</span> IndexPage<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;やっほー&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>リンケージの設定でクラス名をIndexPageとしておくと、IndexPageクラスを作ると自動的に連動するようになります。<br />
正確には「連動」というのは間違いなんですが、この記事では詳細の説明を省かせてください。flaファイルを置いたディレクトリにクラスファイルだらけになるのがイヤな方は「クラスパス」とか「パッケージ」というキーワードでAS3について調べてみるといいと思います。</p>
<p>とりあえずここではリンケージの設定とカスタムクラスの連動を実験してみました。この実験をさらにすすめて、IndexPage.asを次のように書き直してみましょう。</p>
<pre class="actionscript">package<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">animation</span>.<span style="color: #006600;">InOutMovie</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> IndexPage <span style="color: #0066CC;">extends</span> InOutMovie<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">function</span> IndexPage<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;やっほー&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>さっきと比べてどこが変わったかは探してみてください。こんな感じでInOutMovieクラスを継承する形でキャストをカスタムクラス化すると、コンポーネントを使ったときと全く同じ効果が得られます。</p>
<p>まだAS3のクラスに慣れてなくて何を言っているのかわからない方は、今のところはとにかく「コンポーネントで作っていたとしても、あとからクラスを覚えてクラスとして使いたくなったときや、クラスを使えるプログラマーが見つかってその人に引き継ぐときでも、簡単に移行出来るんだ」とだけ覚えておいても結構です。<br />
クラスをばりばりに書ける方も、とりあえずコンポーネントとクラスはかなりシームレスに相互で行き来できるというのがわかっていただけたかと思います。</p>
<p>RollOverButtonなんかも、特にマウスオーバーなんかの状態はコンポーネントで作っておいて、クリックしたときの挙動だけスクリプトで書く、なんていうのも簡単に出来てしまうので非常におすすめです。</p>
<h3>まとめ</h3>
<p>説明が下手なので、長々と冗長な記事で本当すいません。Progressionが非常に柔軟で誰にでもすぐに実践で扱えるくらい簡単に自分の仕事を拡張してくれる名アシスタントであることが伝われば幸いです。<br />
今回この記事ではコンポーネントスタイルから、キャストを部分的にでも（もちろんキャスト全部でも良いですが）クラス化する方法を紹介しました。<br />
もし、シーン管理もクラスとコンポーネントでシームレスに管理したいと興味を持たれたら、以前の記事「<a href="http://utweb.jp/blog/archives/732" target="_self">Progression4：SceneObjectでシーンの構造管理はしない</a>」を併せてお読みください。</p>
<p>この記事がみなさんのFlashサイト制作ライフにお役に立てば幸いです！</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/740/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/740" />
	</item>
		<item>
		<title>Progression4：SceneObjectでシーンの構造管理はしない</title>
		<link>http://utweb.jp/blog/archives/732</link>
		<comments>http://utweb.jp/blog/archives/732#comments</comments>
		<pubDate>Fri, 14 May 2010 17:28:25 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>
		<category><![CDATA[勉強会]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=732</guid>
		<description><![CDATA[みなさんはもう手に入れましたか？ProgressionによるFlashコンテンツ開発ガイドブック
なんでも発売から二週間足らずで重版決定だそうで。おめでとうございます！
僕はと言うと、先週行われたProgression本 [...]]]></description>
			<content:encoded><![CDATA[<p>みなさんはもう手に入れましたか？<a href="http://www.amazon.co.jp/gp/product/4839931798?ie=UTF8&amp;tag=yamayu-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4839931798">ProgressionによるFlashコンテンツ開発ガイドブック</a><br />
なんでも発売から二週間足らずで重版決定だそうで。おめでとうございます！</p>
<p>僕はと言うと、先週行われた<a href="http://atnd.org/events/4215" target="_blank">Progression本を朗読する会</a>に参加してきました。せっかく買った本なんだから読まなきゃね！<br />
で、この朗読会、スーパー肩パッドさんとシナチクさんがTwitterで音頭をとって開催された企画でして、非常に面白くてためになりました。</p>
<p>まず14時から開始して19時半まで5時間半、ぶっとおしでProgression談義。その後居酒屋に移動して3時間またぶっとおしでFlash談義。<br />
僕自身も大阪てら子でProgressionを勉強したのが2年前。出会って以来この2年間で覚えてるだけで15案件、実際には20案件以上は実践投入してきたほどハマりまくってるProgressionについて、ここまでディープに語り合える場と仲間がいなかったので（個人事業なので家内以外仕事のパートナーが居ないので孤独）ここまで時間を忘れて、ほぼ初対面の方々たちと語らいだのは生まれて初めての経験でした。</p>
<p>本当にいい刺激になりました。</p>
<p>で、いちおう自分がとってたノートもあるんだけど、皆さんの喋った内容がまとめきれていないので、せめて自分のネタだけでもまとめておこうと思ったわけです。</p>
<p>21日の僕の勉強会でもこれやります。<br />
不思議なことに全く同じ記事を「クラススタイル向け」と「コンポーネント向け」で2回書きます。今回はその第一回目です。<br />
第一回目は、「クラススタイル向け」に書いてみようと思います。</p>
<h3><span id="more-732"></span>目的：SceneObjectでシーンの構造管理をしない</h3>
<p>この記事の目的はこれにつきます。ちょっと何を言っているのかわからないと思いますが、大まじめです。<br />
本やネット上のサンプルなどにも、SceneObjectを使ってaddSceneとかで子シーンを管理したりしていますし、クラススタイルに慣れてくると、シーンのloadやinit、gotoやunloadを駆使していろいろと複雑なシーン管理を行えるようになってくるのですが、あえてシーンの管理をほとんどしない方法を探るというやり方です。この方法が何故いいのかは勉強会でお話ししたいと思います。</p>
<h3>シーンの構造はXMLで</h3>
<p>具体的にどうシーン管理をSceneObjectではさせないかというと、シーンの構造はほぼ全てXMLで管理するようにします。<br />
「な～んだ。SceneObjectのaddSceneFromXMLだろ。知ってるよ」という方も沢山いらっしゃると思いますが、ここではさらに踏み込んでEasyCastingだけでシーンを管理することを目指します。</p>
<p>普段クラススタイルで作られてる方は「えーEasyCastingってコンポーネントスタイルで扱う簡単シーン管理でしょ。うちの案件はもうちょっと複雑なの。いろいろと出来ないと困る」と思うはずです。大丈夫です。</p>
<h3>プロジェクトの種類は「クラス」でOK</h3>
<p>クラススタイル派にとってEasyCastingを使う心配事は「こんな簡単機能使ってて、俺がしたいあれとかこれとかちゃんと出来るんだろうか」というところにあると思います。少なくとも僕はそうでした。</p>
<p>基本的にはプロジェクト設定のとき、種類は「クラス」でOKです。FlashDevelopやFlashBuilderの対応など、いつもどおりのプロジェクトで書き出せば先ずは準備はOKです。</p>
<h3>サンプルを見てみる</h3>
<p>先ずは<a href="http://utweb.jp/samples/blog/Prog4MimeticEasyCasting.zip">こちらのサンプル（Prog4MimeticEasyCasting.zip）</a>をダウンロードして解凍してみてください。</p>
<p>解凍して出来るファイル構成は</p>
<ul>
<li>classes
<ul>
<li>casts
<ul>
<li>AbstractCast.as</li>
</ul>
</li>
<li>common
<ul>
<li>AbstractSceneManager.as</li>
</ul>
</li>
<li>display
<ul>
<li>AbstractSceneContainer.as</li>
</ul>
</li>
<li>scenes
<ul>
<li>AbstractScene.as</li>
</ul>
</li>
</ul>
<ul>
<li>Index.as</li>
</ul>
</li>
</ul>
<p>こうなっていると思います。<br />
この中で大事なのはcasts.AbstractCasts.asと、scenes.AbstractScene.asと、Index.asの3つだけです。</p>
<p>ちなみに、プロジェクトがこういった構造になっている前提で話を進めます。<br />
<a title="project" href="http://utweb.jp/blog/wp-content/uploads/2010/05/project.png"><img src="http://utweb.jp/blog/wp-content/uploads/2010/05/project-300x219.png" alt="project" title="project" width="300" height="219" class="size-medium wp-image-735 alignnone" /></a></p>
<h3>Index.as</h3>
<p>Index.asを見てみましょう。これ以降、ソースがよく出てきますがソースの興味のある方は読んでもいいし、読まなくてもいいです。なぜなら、僕は自分のソースに全く自信が持てないので、嘘を書いてる可能性もあるし何より大事なのは考え方の説明のほうだと思っているからです。</p>
<pre class="actionscript">package classes <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">lists</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">managers</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">media</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">net</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">tweens</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">config</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #0066CC;">data</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">debug</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">PRMLLoader</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> classes.<span style="color: #006600;">common</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> classes.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 * ...
	 * @author ...
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #0066CC;">Index</span> <span style="color: #0066CC;">extends</span> CastDocument <span style="color: #66cc66;">&#123;</span>
		AbstractScene;
		<span style="color: #808080; font-style: italic;">/**
		 * 新しい Index インスタンスを作成します。
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">Index</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// 自動的に作成される Progression インスタンスの初期設定を行います。</span>
			<span style="color: #808080; font-style: italic;">// 生成されたインスタンスにアクセスする場合には manager プロパティを参照してください。</span>
			<span style="color: #808080; font-style: italic;">//super( &quot;index&quot;, IndexScene, new WebConfig() );</span>
			<span style="color: #808080; font-style: italic;">//PRMLLoaderにまかせるのでここではnullを入れておく</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span>, <span style="color: #000000; font-weight: bold;">null</span>, <span style="color: #000000; font-weight: bold;">new</span> WebConfig<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
		 */</span>
		override protected <span style="color: #000000; font-weight: bold;">function</span> atReady<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> prmlLoader:PRMLLoader = <span style="color: #000000; font-weight: bold;">new</span> PRMLLoader<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			prmlLoader.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
				prmlLoader.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #0066CC;">arguments</span>.<span style="color: #0066CC;">callee</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #808080; font-style: italic;">// 開発者用に Progression の動作状況を出力します。</span>
				Debugger.<span style="color: #006600;">addTarget</span><span style="color: #66cc66;">&#40;</span> manager <span style="color: #66cc66;">&#41;</span>;
				<span style="color: #808080; font-style: italic;">// 外部同期機能を有効化します。</span>
				manager.<span style="color: #006600;">sync</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">//違うところにナビゲーションしたらトップページに</span>
				manager.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProcessEvent.<span style="color: #006600;">PROCESS_ERROR</span>, <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:ProcessEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
					manager.<span style="color: #0066CC;">goto</span><span style="color: #66cc66;">&#40;</span>manager.<span style="color: #006600;">syncedSceneId</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// 最初のシーンに移動します。</span>
				manager.<span style="color: #0066CC;">goto</span><span style="color: #66cc66;">&#40;</span> manager.<span style="color: #006600;">syncedSceneId</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			prmlLoader.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;casting.xml&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>基本的に大事なのは、コンストラクタ内では初期化を行わずに、atReadyの中でPRMLLoaderを使ってcasting.xmlを読み込んでいることだけです。</p>
<h3>EasyCastingSceneもどきを作る</h3>
<p>次にscenes.AvstractScene.asのほうです。こちらは潔いくらいEasyCastingSceneのパクリです。<br />
ヘッダの記載に迷ったのが、ほとんど手を付けてないのでEasyCastingの表記を守りましたが、逆に「へぼくなってる。手を加えたのなら自分の表記にするべき」なのであれば、ヘッダーの部分は僕自身の名前に変えます。興味ある方はオリジナルのEasyCastingと読み比べて見てください。</p>
<p>※2010.05.21 公式の4.0.2bパッチに対応しました</p>
<pre class="actionscript"><span style="color: #808080; font-style: italic;">/**
 * Progression 4
 *
 * @author Copyright (C) 2007-2010 taka:nium.jp, All Rights Reserved.
 * @version 4.0.2b
 * @see http://progression.jp/
 *
 * Progression Libraries is dual licensed under the &quot;Progression Library License&quot; and &quot;GPL&quot;.
 * http://progression.jp/license
 */</span>
package classes.<span style="color: #006600;">scenes</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Dictionary</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">getDefinitionByName</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">nium</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">debug</span>.<span style="color: #006600;">Logger</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">nium</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">L10N</span>.<span style="color: #006600;">L10NNiumMsg</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">nium</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">ObjectUtil</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">nium</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">StringUtil</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">AddChild</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">AddChildAt</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">RemoveChild</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">lists</span>.<span style="color: #006600;">ParallelList</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">L10N</span>.<span style="color: #006600;">L10NProgressionMsg</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">PackageInfo</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">DataProvideEvent</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">SceneEvent</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">executors</span>.<span style="color: #006600;">CommandExecutor</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">Progression</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> classes.<span style="color: #006600;">display</span>.<span style="color: #006600;">AbstractSceneContainer</span>;
	<span style="color: #0066CC;">import</span> classes.<span style="color: #006600;">common</span>.<span style="color: #006600;">AbstractSceneManager</span>;
	<span style="color: #0066CC;">import</span> classes.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 * &lt;span lang=&quot;ja&quot;&gt;EasyCastingScene クラスは、拡張された PRML 形式の XML データを使用して ActionScript を使用しないコンポーネントベースの開発スタイルを提供するクラスです。&lt;/span&gt;
	 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
	 *
	 * @example
&lt;listing version=&quot;3.0&quot;&gt;
	 * // EasyCastingScene インスタンスを作成する
	 * var scene:EasyCastingScene = new EasyCastingScene();
	 * &lt;/listing&gt;
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AbstractScene <span style="color: #0066CC;">extends</span> SceneObject <span style="color: #66cc66;">&#123;</span>
		AbstractCast;
		<span style="color: #808080; font-style: italic;">/**
		 * すべてのインスタンスを保持した Dictionary インスタンスを取得します。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> _instances:Dictionary = AbstractSceneManager.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">contentInstance</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * 現在表示しているインスタンスを保持した Dictionary インスタンスを取得します。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> _displayingList:Dictionary = AbstractSceneManager.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">displayingList</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * コンテナインスタンスを保持した Dictionary インスタンスを取得します。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> _containers:Dictionary = AbstractSceneManager.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">containers</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * &lt;span lang=&quot;ja&quot;&gt;自身に移動した際に表示させる表示オブジェクトを保持した配列を取得します。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> casts<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Array</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">return</span> _casts.<span style="color: #0066CC;">slice</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _casts:<span style="color: #0066CC;">Array</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * キャストオブジェクトのクラス名をキーとして、パラメータを保持した Dictionary インスタンスを取得します。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _castParameters:Dictionary;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * &lt;span lang=&quot;ja&quot;&gt;新しい EasyCastingScene インスタンスを作成します。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;Creates a new EasyCastingScene object.&lt;/span&gt;
		 *
		 * @param name
		 * &lt;span lang=&quot;ja&quot;&gt;シーンの名前です。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 * @param initObject
		 * &lt;span lang=&quot;ja&quot;&gt;設定したいプロパティを含んだオブジェクトです。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AbstractScene<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>:<span style="color: #0066CC;">String</span> = <span style="color: #000000; font-weight: bold;">null</span>, initObject:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// 初期化する</span>
			_casts = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
			_castParameters = <span style="color: #000000; font-weight: bold;">new</span> Dictionary<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// 親クラスを初期化する</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>, initObject <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// Progression が CommandExecutor を実装していなければ例外をスローする</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> Progression.<span style="color: #006600;">config</span>.<span style="color: #006600;">executor</span> != CommandExecutor <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #0066CC;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Error</span><span style="color: #66cc66;">&#40;</span> Logger.<span style="color: #006600;">getLog</span><span style="color: #66cc66;">&#40;</span> L10NNiumMsg.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">ERROR_017</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span> className, <span style="color: #ff0000;">&quot;CommandExecutor&quot;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// イベントリスナーを登録する</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span> SceneEvent.<span style="color: #006600;">SCENE_UNLOAD</span>, _sceneUnload, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span> SceneEvent.<span style="color: #006600;">SCENE_INIT</span>, _sceneInit, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span> SceneEvent.<span style="color: #006600;">SCENE_ADDED_TO_ROOT</span>, _sceneAddedToRoot, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span> SceneEvent.<span style="color: #006600;">SCENE_REMOVED_FROM_ROOT</span>, _sceneRemovedFromRoot, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span> <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * &lt;span lang=&quot;ja&quot;&gt;XML データが EasyCasting 拡張 PRML フォーマットに準拠しているかどうかを返します。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 *
		 * @param prml
		 * &lt;span lang=&quot;ja&quot;&gt;フォーマットを検査したい XML データです。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 * @return
		 * &lt;span lang=&quot;ja&quot;&gt;フォーマットが合致すれば true を、合致しなければ false となります。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 *
		 * @example
&lt;listing version=&quot;3.0&quot;&gt;
		 * &lt;/listing&gt;
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> validate<span style="color: #66cc66;">&#40;</span> prml:<span style="color: #0066CC;">XML</span> <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span> <span style="color: #66cc66;">&#123;</span>
			prml = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span> prml.<span style="color: #006600;">toXMLString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// コンテンツタイプを確認する</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#40;</span> prml.<span style="color: #006600;">attribute</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;type&quot;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;text/easycasting&quot;</span>			:
				<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;text/prml.easycasting&quot;</span>	: <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">break</span>; <span style="color: #66cc66;">&#125;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;text/prml.plain&quot;</span>			: <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">break</span>; <span style="color: #66cc66;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">default</span>							: <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>; <span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// 必須プロパティを精査する</span>
			<span style="color: #b1b100;">for</span> each <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> cast:<span style="color: #0066CC;">XML</span> <span style="color: #b1b100;">in</span> prml..<span style="color: #006600;">cast</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> !<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#40;</span> cast.<span style="color: #006600;">attribute</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;cls&quot;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>; <span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// PRML として評価する</span>
			prml.@<span style="color: #0066CC;">type</span> = <span style="color: #ff0000;">&quot;text/prml.plain&quot;</span>;
&nbsp;
			<span style="color: #b1b100;">return</span> SceneObject.<span style="color: #006600;">validate</span><span style="color: #66cc66;">&#40;</span> prml <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * &lt;span lang=&quot;ja&quot;&gt;この SceneObject インスタンスの子を PRML 形式の XML データから追加します。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 *
		 * @param prml
		 * &lt;span lang=&quot;en&quot;&gt;PRML 形式の XML データです。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 */</span>
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addSceneFromXML<span style="color: #66cc66;">&#40;</span> prml:<span style="color: #0066CC;">XML</span> <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// &lt;scene&gt; の cls を上書きする</span>
			<span style="color: #808080; font-style: italic;">/*
			for each ( var scene:XML in prml..scene ) {
				scene.@cls = &quot;jp.progression.scenes.EasyCastingScene&quot;;
			}
			*/</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// PRML のフォーマットが正しくなければ例外をスローする</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> !validate<span style="color: #66cc66;">&#40;</span> prml <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #0066CC;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Error</span><span style="color: #66cc66;">&#40;</span> Logger.<span style="color: #006600;">getLog</span><span style="color: #66cc66;">&#40;</span> L10NNiumMsg.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">ERROR_005</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;PRML&quot;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// 親のメソッドを実行する</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addSceneFromXML</span><span style="color: #66cc66;">&#40;</span> prml <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * &lt;span lang=&quot;ja&quot;&gt;保持しているデータを解放します。&lt;/span&gt;
		 * &lt;span lang=&quot;en&quot;&gt;&lt;/span&gt;
		 */</span>
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			_casts = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
			_castParameters = <span style="color: #000000; font-weight: bold;">new</span> Dictionary<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// 親のメソッドを実行する</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">dispose</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * シーン移動時に目的地がシーンオブジェクト自身もしくは親階層だった場合に、階層が変更される直前に送出されます。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _sceneUnload<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">e</span>:SceneEvent <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// 対象がルートでなければ終了する</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">this</span> != <span style="color: #0066CC;">super</span>.<span style="color: #006600;">root</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">return</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// コンテナを取得する</span>
			_containers<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">super</span>.<span style="color: #006600;">container</span><span style="color: #66cc66;">&#93;</span> ||= <span style="color: #000000; font-weight: bold;">new</span> AbstractSceneContainer<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">this</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> container:AbstractSceneContainer = _containers<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">super</span>.<span style="color: #006600;">container</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// コマンドリストを作成する</span>
			<span style="color: #000000; font-weight: bold;">var</span> removeChildList:ParallelList = <span style="color: #000000; font-weight: bold;">new</span> ParallelList<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// すでに表示されている対象を検索する</span>
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> cls:<span style="color: #0066CC;">String</span> <span style="color: #b1b100;">in</span> _displayingList <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// コマンドを追加する</span>
				removeChildList.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> RemoveChild<span style="color: #66cc66;">&#40;</span> container, _displayingList<span style="color: #66cc66;">&#91;</span>cls<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// 登録から削除する</span>
				<span style="color: #0066CC;">delete</span> _displayingList<span style="color: #66cc66;">&#91;</span>cls<span style="color: #66cc66;">&#93;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// コマンドを追加する</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span> removeChildList <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * シーンオブジェクト自身が目的地だった場合に、到達した瞬間に送出されます。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _sceneInit<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">e</span>:SceneEvent <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// コンテナを取得する</span>
			_containers<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">super</span>.<span style="color: #006600;">container</span><span style="color: #66cc66;">&#93;</span> ||= <span style="color: #000000; font-weight: bold;">new</span> AbstractSceneContainer<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">this</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> container:AbstractSceneContainer = _containers<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">super</span>.<span style="color: #006600;">container</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// コンテナが登録されていなければ登録する</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> !<span style="color: #0066CC;">super</span>.<span style="color: #006600;">container</span>.<span style="color: #006600;">contains</span><span style="color: #66cc66;">&#40;</span> container <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">super</span>.<span style="color: #006600;">container</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span> container <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// コマンドリストを作成する</span>
			<span style="color: #000000; font-weight: bold;">var</span> addChildList:ParallelList = <span style="color: #000000; font-weight: bold;">new</span> ParallelList<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> removeChildList:ParallelList = <span style="color: #000000; font-weight: bold;">new</span> ParallelList<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// すでに表示されている対象を検索する</span>
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> cls:<span style="color: #0066CC;">String</span> <span style="color: #b1b100;">in</span> _displayingList <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// 登録されていれば次へ</span>
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> _castParameters<span style="color: #66cc66;">&#91;</span>cls<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">continue</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
				<span style="color: #808080; font-style: italic;">// コマンドを追加する</span>
				removeChildList.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> RemoveChild<span style="color: #66cc66;">&#40;</span> container, _displayingList<span style="color: #66cc66;">&#91;</span>cls<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// 登録から削除する</span>
				<span style="color: #0066CC;">delete</span> _displayingList<span style="color: #66cc66;">&#91;</span>cls<span style="color: #66cc66;">&#93;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// 現在のシーンで必要な対象を追加する</span>
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> cast:<span style="color: #0066CC;">String</span> <span style="color: #b1b100;">in</span> _castParameters <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// インスタンスを取得する</span>
				<span style="color: #000000; font-weight: bold;">var</span> instance:Sprite = _displayingList<span style="color: #66cc66;">&#91;</span>cast<span style="color: #66cc66;">&#93;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// すでに表示されていれば次へ</span>
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> instance <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">continue</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
				<span style="color: #808080; font-style: italic;">// インスタンスを取得する</span>
				instance = _instances<span style="color: #66cc66;">&#91;</span>cast<span style="color: #66cc66;">&#93;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// プロパティを設定する</span>
				ObjectUtil.<span style="color: #006600;">setProperties</span><span style="color: #66cc66;">&#40;</span> instance, _castParameters<span style="color: #66cc66;">&#91;</span>cast<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// インデックスを取得する</span>
				<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">index</span>:<span style="color: #0066CC;">String</span> = _castParameters<span style="color: #66cc66;">&#91;</span>cast<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">index</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// コマンドを追加する</span>
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">index</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
					addChildList.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> AddChildAt<span style="color: #66cc66;">&#40;</span> container, instance, <span style="color: #0066CC;">parseInt</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">index</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
					addChildList.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> AddChild<span style="color: #66cc66;">&#40;</span> container, instance <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
&nbsp;
				<span style="color: #808080; font-style: italic;">// 表示中リストに登録する</span>
				_displayingList<span style="color: #66cc66;">&#91;</span>cast<span style="color: #66cc66;">&#93;</span> = instance;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// コマンドを追加する</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span> removeChildList, addChildList <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * シーンオブジェクトが直接、またはシーンオブジェクトを含むサブツリーの追加により、ルートシーン上のシーンリストに追加されたときに送出されます。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _sceneAddedToRoot<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">e</span>:SceneEvent <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">super</span>.<span style="color: #006600;">dataHolder</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">super</span>.<span style="color: #006600;">dataHolder</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span> DataProvideEvent.<span style="color: #006600;">DATA_UPDATE</span>, _update, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span> <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * シーンオブジェクトが直接、またはシーンオブジェクトを含むサブツリーの削除により、ルートシーン上のシーンリストから削除されようとしているときに送出されます。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _sceneRemovedFromRoot<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">e</span>:SceneEvent <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">super</span>.<span style="color: #006600;">dataHolder</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">super</span>.<span style="color: #006600;">dataHolder</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span> DataProvideEvent.<span style="color: #006600;">DATA_UPDATE</span>, _update <span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * 管理するデータが更新された場合に送出されます。
		 */</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _update<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">e</span>:DataProvideEvent <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// データを取得する</span>
			<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">xml</span>:<span style="color: #0066CC;">XML</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">super</span>.<span style="color: #006600;">toXMLString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// cast を取得する</span>
			_castParameters = <span style="color: #000000; font-weight: bold;">new</span> Dictionary<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">for</span> each <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> cast:<span style="color: #0066CC;">XML</span> <span style="color: #b1b100;">in</span> <span style="color: #0066CC;">xml</span>.<span style="color: #006600;">cast</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> o:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// アトリビュートを取得する</span>
				<span style="color: #b1b100;">for</span> each <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> attribute:<span style="color: #0066CC;">XML</span> <span style="color: #b1b100;">in</span> cast.<span style="color: #0066CC;">attributes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
					o<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#40;</span> attribute.<span style="color: #0066CC;">name</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span> = StringUtil.<span style="color: #006600;">toProperType</span><span style="color: #66cc66;">&#40;</span> attribute <span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
&nbsp;
				_castParameters<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#40;</span> cast.@cls <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span> = o;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// インスタンスを作成する</span>
			_casts = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">var</span> clsPath:<span style="color: #0066CC;">String</span> <span style="color: #b1b100;">in</span> _castParameters <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">try</span> <span style="color: #66cc66;">&#123;</span>
					<span style="color: #808080; font-style: italic;">// クラスの参照を取得する</span>
					<span style="color: #000000; font-weight: bold;">var</span> cls:<span style="color: #000000; font-weight: bold;">Class</span> = getDefinitionByName<span style="color: #66cc66;">&#40;</span> clsPath <span style="color: #66cc66;">&#41;</span> as <span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
					<span style="color: #808080; font-style: italic;">// インスタンスを生成する</span>
					_instances<span style="color: #66cc66;">&#91;</span>clsPath<span style="color: #66cc66;">&#93;</span> ||= <span style="color: #000000; font-weight: bold;">new</span> cls<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
					<span style="color: #808080; font-style: italic;">// リストに追加する</span>
					_casts.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> clsPath <span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #0066CC;">catch</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">e</span>:<span style="color: #0066CC;">Error</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> PackageInfo.<span style="color: #006600;">hasDebugger</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
						<span style="color: #808080; font-style: italic;">// 警告を表示する</span>
						Logger.<span style="color: #0066CC;">error</span><span style="color: #66cc66;">&#40;</span> Logger.<span style="color: #006600;">getLog</span><span style="color: #66cc66;">&#40;</span> L10NProgressionMsg.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">ERROR_018</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span> clsPath <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
					<span style="color: #66cc66;">&#125;</span>
&nbsp;
					<span style="color: #808080; font-style: italic;">// 登録を破棄する</span>
					<span style="color: #0066CC;">delete</span> _castParameters<span style="color: #66cc66;">&#91;</span>clsPath<span style="color: #66cc66;">&#93;</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<h3>あとはガンガンXMLを書いていく</h3>
<p>ほかのクラスはどうでもいいです。<br />
とりあえずバグが出なくなるように調整したクラスだったりしますから。</p>
<p>あとはProgressionシーンエディタでもいいですし、XMLを直接でもいいですし、PRMLをがっつり書いていきます。<br />
がっつり書き終えたら、次の二つのことをしておきます。</p>
<ol>
<li>PRMLの属性を type="text/prml.plain" にしておく</li>
<li>sceneのcls属性を全部"classes.scenes.AbstractScene"にしておく</li>
</ol>
<p>あとは動かすだけ！</p>
<p>たったこれだけでクラススタイルの自由な環境を維持したままシーンの構造をXMLにまるなげ出来る環境が整いました。<br />
PRMLのtypeは"text/prml.plain"ですので、XMLでも個別に動かしたいシーンはclasses.scenes.AbstractSceneをオーバーライドしたカスタムSceneObjectでいつもどおりの開発も行えます。<br />
もう少しコンポーネントとハイブリッドな開発を行いたければ、僕の一番のおすすめはPRMLをEasyCastingと同じようにcastタグを追加するスタイルです。</p>
<p>castタグのcls属性もクラスの指定なので、ここで独自のCastObjectを指定しておけば、クラススタイルの開発と変わることなくキャストによる開発を行えます。むしろSceneObjectをXML以外で触ることがほとんど無くなるので従来のクラススタイルより一歩進んでスマートに開発が行えるようになりました。</p>
<p>castタグ以外にも、ほかにも自由にXMLにタグを追加してdataHolderから値をとるなど、かなり柔軟で強力な開発を行えるスタイルなので、ばりばりクラスを使いこなす人ほど「コンポーネントスタイルとの連携なんて」と思わず是非とも実践して欲しい技の一つです。</p>
<p>ご意見ご質問は随時受け付けております。みんなでオレオレProgression開発スタイルを語り合おう！</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/732/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/732" />
	</item>
		<item>
		<title>5/21(金) Progressionお勉強会やります</title>
		<link>http://utweb.jp/blog/archives/723</link>
		<comments>http://utweb.jp/blog/archives/723#comments</comments>
		<pubDate>Tue, 27 Apr 2010 13:48:43 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>
		<category><![CDATA[セミナー]]></category>
		<category><![CDATA[勉強会]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=723</guid>
		<description><![CDATA[5/21にProgressionの勉強会をやります－！
詳しい内容はこちらのリンクを参照して下さい。
以前も何度かProgressionのコンポーネントとクラスの話題はこのブログでもやってきていますが、いろいろと情報も古 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://atnd.org/events/4244" target="_blank"><img src="http://utweb.jp/blog/wp-content/uploads/2010/04/20100521-300x96.jpg" alt="Progressionお勉強会 UTWEB" title="Progressionお勉強会 UTWEB" width="300" height="96" class="alignleft size-medium wp-image-724" /></a>5/21にProgressionの勉強会をやります－！</p>
<p>詳しい内容は<a href="http://atnd.org/events/4244" target="_blank">こちらのリンクを参照</a>して下さい。</p>
<p>以前も何度かProgressionのコンポーネントとクラスの話題はこのブログでもやってきていますが、いろいろと情報も古くなってきてたり微妙に間違えているところがあったりしてたので、Progression4も正式公開したことだしここいらへんで情報共有の良い機会ではないかと思ったわけです。</p>
<p><span id="more-723"></span>内容に関しても、<a href="http://atnd.org/events/4244" target="_blank">リンク先を参照</a>して頂くのが一番ですが、要はコンポーネントとクラスをしっかり分離して作ったら思いのほか使い勝手が飛躍的に向上したので、そこらへんについて勉強したいと思います。<br />
このブログでも、勉強会に向けて少しでも仕入れておいた方が良い知識を何回かに分けて書いていこうかと思います。</p>
<h3>Progressionはシーンとキャストを管理してくれる</h3>
<p>Progressionはよく「Flashサイトを作るのに便利なフレームワーク」と説明されますが、僕はサイトに限らず何を作るにしてもFlashをより便利で簡単に作れるようになるフレームワークと認識しています。<br />
それは、もともとFlashにはステージ（<span style="color: #993366;">舞台</span>）の上でそのままタイムラインが進行するソフトだったものに、シーン（<span style="color: #993366;">場面</span>）とキャスト（<span style="color: #993366;">役者</span>）の管理を追加したものがProgressionだからです。<br />
Flashにもネイティブにシーンとかあるし、インスタンスが<span style="color: #993366;">役者</span>みたいなものなんだけどProgressionはそれらをもっと厳密に扱うことになります。<br />
いうなれば、今までてんでばらばらに動いていたFlash劇団に、Progressionさんという<strong>場面と役者の進行管理役</strong>が入団したようなイメージです。<br />
今まではFlash劇団員たちはそれぞれが自分の出るタイミングをはかって<span style="color: #993366;">舞台</span>に出て、演技しながらもそれぞれが舞台の状況を判断して舞台から退場したり、状況に応じて変身したりしていました。とても自由だけどエラー（<span style="color: #993366;">失敗</span>）も多かったことも確かでした。<br />
そこに現れたProgressionさんは、<strong>進行管理役</strong>である以上慣れないうちはFlash劇団員にとって口うるさい厄介者に感じるかも知れません。<br />
ところが、<span style="color: #993366;">舞台</span>に出たり引っ込んだり、その<span style="color: #993366;">場面</span>のタイミングとか<span style="color: #993366;">舞台</span>の状況とかは全部Progressionさんに任せられることが出来るようになったので、<span style="color: #993366;">役者</span>達は舞台に出たら出たで一生懸命、演技にのみ集中することが出来るようになった、僕にとってはProgressionに対してそういうイメージが強いです。</p>
<p>劇団のたとえ話から戻します。Progressionがシーンとキャストという概念をFlashに新たに追加して、より簡単にFlashの進行をコントロールしてくれるおかげで、面倒臭いところは全部Progressionに任せてFlashの表現にのみ集中することが出来るようになりました。</p>
<h3>Progressionはコマンドを使わせてくれる</h3>
<p>もうひとつProgressionが便利なのが、コマンドという便利な命令が沢山用意されていることです。<br />
さらにこのコマンドは「順番に実行していくか」「一度に実行していくか」を細かく自由に選べるので（しかもとっても簡単に！）複雑な表現なんかも本当に楽に挑戦することが出来るようになります。</p>
<h3>Progressionは使う人を選ばない</h3>
<p>こんなに便利で楽しいProgressionの凄いところは、Flashを触れる人であれば誰でも得意なスタイルで触り始められることです。<br />
Progressionには「コンポーネントスタイル」「タイムラインスタイル」「クラススタイル」という3つのスタイルで始められるのですが、コンポーネントスタイルは特に圧巻で、ActionScriptは「stop()」のスの字も一文字も書かずに、かなり複雑なFlashが作れてしまいます。<br />
いずれブログでも取り上げたいのですが、ゲームなんかも作れてしまいます。</p>
<p>それだけを見ると、昔よくあったサードパーティ製の「けっこう複雑なFlashが驚くほど簡単に作れちゃう！」系のソフトみたいな、いわゆる「<strong>プロユースでない</strong>」ゆるいソフトを想像するかも知れませんが、とんでもないです。<br />
自分で言うのもなんですが、僕のところの制作実績として公開非公開あわせて小さい案件からけっこう大規模な案件までやらせて頂いてますが、Progressionは大案件の開発にも耐えうる、どころか僕の経験したくらいの大案件ならば、<strong>もはやProgression無しでは難しい</strong>くらい信頼性の高い開発環境を提供してくれています。</p>
<p>ひとたび「クラススタイル」で作り始めると、Progressionの設計の高さから自分のコーディング力もアップすること請け合いですｗ<br />
ソースコードも公開されているので、困ったときにリファレンスと一緒に眺めてるとかなり勉強にもなります。</p>
<p>要するにProgressionは、「何々が出来ないと使えない」ような使う人を選ぶフレームワークではなく、使う人が「<strong>すきなProgressionを選べばいい</strong>」ように出来ているのです。</p>
<h3>Progressionのスタイルには隔たりがない</h3>
<p>Progressionのコンポーネントスタイルとタイムラインスタイルとクラススタイルには特に隔たりがありません。<br />
作り方にコツがあるんですが、最初コンポーネントで作っておいてあとからクラスに変更することも簡単ですし、その逆にクラスで作っていてもあとからコンポーネントにし直すことも簡単に出来ます。</p>
<p>勉強会では、このへんのコツもお話しする予定ですのでお楽しみにして下さい！</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/723/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/723" />
	</item>
		<item>
		<title>Progression3でクラススタイルにコンポーネントを連携させる（1/3）</title>
		<link>http://utweb.jp/blog/archives/567</link>
		<comments>http://utweb.jp/blog/archives/567#comments</comments>
		<pubDate>Tue, 01 Dec 2009 18:11:13 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=567</guid>
		<description><![CDATA[世間はProgression4の話題でもちきりですが、いまだProgression3の話題を書こうとしている流行にうとい男、正宗です。
以前紹介した「Progressionでコンポーネントスタイルにクラスを連携させる」の [...]]]></description>
			<content:encoded><![CDATA[<p>世間はProgression4の話題でもちきりですが、いまだProgression3の話題を書こうとしている流行にうとい男、正宗です。<br />
以前紹介した「<a href="/blog/archives/321" target="_self">Progressionでコンポーネントスタイルにクラスを連携させる</a>」の続きです。<br />
今回から進めて全3回の予定でやってみます。</p>
<p>以前紹介したやり方は「まずコンポーネントスタイルで作ってみて、ちょっとずつクラスを混ぜ込んでみよう」というものでしたが、今回からは「<strong>いかにスクリプトを書かずにすむようにスクリプトを書くか</strong>」です。</p>
<p>一見、矛盾してそうなコンセプトですが、前回よりも研究結果がだいぶ洗練されてきたので、スクリプトアレルギーの方も、よりコピペだけでまともに動かせるようにはなっていったかなと思います(^^;<br />
<span id="more-567"></span></p>
<h3>作り方は違うけどできあがりは前回とほぼ同じパターン</h3>
<p>前回は、最初クラスベースでプロジェクトを作っておいて、<a href="http://progression.jp/ja/doc/ref/component/#item-ProgressionLoader" target="_blank">EasyCastingLoaderコンポーネント</a>をステージに置くことで無理矢理コンポーネントベーススタイルに戻すという方法をとっていました。</p>
<p>今回は結果は同じなんですがクラスだけで完結するパターンを考えてみました。</p>
<p>いちおう前提として<a href="http://progression.jp/ja/doc/tutorial/component/" target="_blank">Progressionコンポーネントスタイルガイド</a>での制作は出来るものとして進めていきます。</p>
<h4>先ずはプロジェクトを作成</h4>
<div id="attachment_572" class="wp-caption alignnone" style="width: 160px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/12/6fce63368ed0709e876d6b9b914f9756.png"><img class="size-thumbnail wp-image-572" title="プロジェクトエディタ" src="http://utweb.jp/blog/wp-content/uploads/2009/12/6fce63368ed0709e876d6b9b914f9756-150x150.png" alt="クラスベースでプロジェクトを作成します" width="150" height="150" /></a><p class="wp-caption-text">クラスベースでプロジェクトを作成します</p></div>
<p>普通にクラスベースのプロジェクトが出来ます。</p>
<h4>シーンエディタでシーンを編集</h4>
<div id="attachment_574" class="wp-caption alignnone" style="width: 277px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/12/24a00cc2fa41054b16f0096045f62b9b.png"><img class="size-medium wp-image-574" title="シーンエディタ" src="http://utweb.jp/blog/wp-content/uploads/2009/12/24a00cc2fa41054b16f0096045f62b9b-267x300.png" alt="コンポーネントスタイルと同じようにシーンエディタでシーンを作ります" width="267" height="300" /></a><p class="wp-caption-text">コンポーネントスタイルと同じようにシーンエディタでシーンを作ります</p></div>
<p>うまくシーンが出来たら、プロジェクトで出来たフォルダに「deploy」ってフォルダがさらに出来てるのでその中に「easycasting.xml」と名前を付けて保存しましょう。</p>
<p>というか、ここはコンポーネントと同じです。</p>
<h4>Index.asの編集</h4>
<p><a href="http://utweb.jp/blog/wp-content/uploads/2009/12/0e25fbd1ec3dfef67bed6b3859684bfe.png"><img class="alignleft size-medium wp-image-575" title="ファイル構成" src="http://utweb.jp/blog/wp-content/uploads/2009/12/0e25fbd1ec3dfef67bed6b3859684bfe-168x300.png" alt="ファイル構成" width="168" height="300" /></a>プロジェクトの作成の際にパッケージ名やメインクラスの設定を変えていなければ、src/classes/myproject/Index.asというファイルが出来ていると思います。</p>
<p>これがドキュメントクラスというやつで、まあ言ってみれば一番最初に実行される奴です。前回はステージのプロパティからこれを消して、その代わりにEasyCastingLoaderコンポーネントをステージに置くことでクラスベースからコンポーネントベースに変更していました。<br />
今回はこのドキュメントクラスをそのまま使ってEasyCastingLoaderコンポーネントの代わりに働いてもらうことにします。</p>
<p>Index.asファイルを開くと、60行目あたりに</p>
<pre class="actionscript"><span style="color: #808080; font-style: italic;">// Progression インスタンスを作成します。</span>
prog = <span style="color: #000000; font-weight: bold;">new</span> Progression<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;index&quot;</span>, <span style="color: #0066CC;">stage</span>, IndexScene <span style="color: #66cc66;">&#41;</span>;</pre>
<p>とあります。<br />
どうやらこのあたりがクラスベースの最初に動作するとこらへんっぽいです。</p>
<p>そこでこのあたりを一気に書き換えてしまいます。コンポーネントベースと同じ動きにしたいので、EasyCastingLoaderクラスと言う奴を使います。<br />
このEasyCastingLoaderクラスとはEasyCastingLoaderコンポーネントと名前が似てますが、というか「クラス」と「コンポーネント」のとこ以外は名前が一緒なので、たぶん同じような動きをするクラスなんだなと思います。<br />
試しにIndex.asの58行目から65行目あたり（つまり最後まで）を全部削って、この一行にかえてみます。</p>
<pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> easyCastingLoader:EasyCastingLoader = <span style="color: #000000; font-weight: bold;">new</span> EasyCastingLoader<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>, <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;easycasting.xml&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre>
<p>はっきり言ってしまえば、これで終わりです。あとはコンポーネントスタイルと同じように進めていったら、Flashサイトが出来てしまいます。素晴らしすぎます。Progression。</p>
<p>いちおう蛇足的にいろいろと書き足してみたIndex.asをまとめてさらしておきます。</p>
<pre class="actionscript">package myproject <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageAlign</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageQuality</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageScaleMode</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">ProgressEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">debug</span>.<span style="color: #006600;">Verbose</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">ui</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 * Index クラス
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #0066CC;">Index</span> <span style="color: #0066CC;">extends</span> CastDocument <span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Progression インスタンスを取得します。
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> prog:Progression;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * コンストラクタ
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">Index</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
		 */</span>
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onInit<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// stage の初期設定を行います。</span>
			<span style="color: #0066CC;">align</span> = StageAlign.<span style="color: #006600;">TOP_LEFT</span>;
			<span style="color: #0066CC;">quality</span> = StageQuality.<span style="color: #006600;">HIGH</span>;
			<span style="color: #0066CC;">scaleMode</span> = StageScaleMode.<span style="color: #006600;">NO_SCALE</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// 開発者用の出力を有効化します。</span>
			<span style="color: #808080; font-style: italic;">//Verbose.enabled = true;</span>
			<span style="color: #808080; font-style: italic;">//Verbose.filteringCommand();</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// コンテキストメニューを使用しない場合true</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
				Progression.<span style="color: #006600;">uiContextMenu</span>.<span style="color: #0066CC;">enabled</span> = <span style="color: #000000; font-weight: bold;">false</span>;
				CastObjectContextMenu.<span style="color: #0066CC;">enabled</span> = <span style="color: #000000; font-weight: bold;">false</span>;
				CastButtonContextMenu.<span style="color: #0066CC;">enabled</span> = <span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// Progression インスタンスを作成します。</span>
			<span style="color: #808080; font-style: italic;">//prog = new Progression( &quot;index&quot;, stage, IndexScene );</span>
			<span style="color: #000000; font-weight: bold;">var</span> easyCastingLoader:EasyCastingLoader = <span style="color: #000000; font-weight: bold;">new</span> EasyCastingLoader<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>, <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;easycasting.xml&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			easyCastingLoader.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
				prog = <span style="color: #0066CC;">e</span>.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">progression</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// ブラウザ再生時に URL 同期を有効化します。</span>
				prog.<span style="color: #006600;">sync</span> = <span style="color: #000000; font-weight: bold;">false</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">//あとはお好みに応じて…</span>
				<span style="color: #808080; font-style: italic;">//</span>
				<span style="color: #808080; font-style: italic;">//ページ遷移中はボタンを押せないようにする場合はtrueにする</span>
				<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>==<span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
					prog.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProcessEvent.<span style="color: #006600;">PROCESS_START</span>, <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:ProcessEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseChildren</span> = <span style="color: #000000; font-weight: bold;">false</span>;
					<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
					prog.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProcessEvent.<span style="color: #006600;">PROCESS_COMPLETE</span>, <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:ProgressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseChildren</span> = <span style="color: #000000; font-weight: bold;">true</span>;
					<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #808080; font-style: italic;">//ブラウザ再生時URL同期をONにした場合、直リンクなどで間違ったシーンIDのときIndexSceneに飛ばす</span>
				<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>prog.<span style="color: #006600;">sync</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
					prog.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProcessEvent.<span style="color: #006600;">PROCESS_ERROR</span>, <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:ProgressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
						prog.<span style="color: #0066CC;">goto</span><span style="color: #66cc66;">&#40;</span>prog.<span style="color: #006600;">firstSceneId</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>自分で紹介しておいてなんですが、今回の方法そのものにはあんまりメリットがありません。<br />
クラスをこう書いたから、コンポーネントスタイルガイドと同じ事が出来たよ、というだけでは、じゃあ最初からコンポーネントで作ればいいからです。<br />
ただ、ここから必要なぶんだけちょっとずつクラスを混ぜていくことになります。僕もまだ研究段階なので「こうしたほうがいいよ」いうものではないですが、「こういう方法もあるよ」というくらいのまとめ方はして、次回に発表したいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/567/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/567" />
	</item>
		<item>
		<title>Progressionでコンポーネントスタイルにクラスを連携させる</title>
		<link>http://utweb.jp/blog/archives/321</link>
		<comments>http://utweb.jp/blog/archives/321#comments</comments>
		<pubDate>Sun, 24 May 2009 18:32:19 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=321</guid>
		<description><![CDATA[こんにちは。最近引っ越しましたが取引先にまだ挨拶を済ませていない正宗です。前回に引き続きProgressionの話題をしたいと思います。
Progressionではスクリプトを一切使わない「コンポーネントスタイル」やタイ [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。最近引っ越しましたが取引先にまだ挨拶を済ませていない正宗です。前回に引き続き<a href="http://progression.jp/ja/" target="_blank">Progression</a>の話題をしたいと思います。</p>
<p>Progressionではスクリプトを一切使わない「コンポーネントスタイル」やタイムラインスクリプト派の「タイムラインスタイル」、クラスでわしわし書きたい人向けの「クラススタイル」など制作者のスタイルにあわせたとても柔軟な開発スタイルが用意されていますが、今回はその中でも「コンポーネントスタイル」と「クラススタイル」を連携させた開発手法についてまとめてみました。</p>
<p><span id="more-321"></span></p>
<h3>はじめに</h3>
<p>そもそも「コンポーネントスタイル」と「クラススタイル」の連携とはなんぞやという説明ですが、ひとつのサイトを作る上でデザイナーやアニメーターは「コンポーネントスタイル」を、プログラマーは「クラススタイル」をそれぞれ用いながら、同時にサイト制作を行えないかと考えてあみだした必殺技です。<br />
Progressionのようなよくできた開発フレームワークがあれば、Progressionを制作の共通言語として、開発スタイルの違いを気にせずほんとうに簡単に連携してサイト制作が行えるようになります。</p>
<p>今回はそのためのひとつの方法をうちがやってる例として紹介したいと思います。</p>
<h3>今回の例</h3>
<p>コンポーネントとクラス、それぞれのスタイルの連携といっても、ベースのスタイルをどちらにするか先ず決めなければ行けません。<br />
ページの遷移のコントロールなど、サイト全体の管理をクラスベースで行いたい場合は「クラススタイル」ベースにしておいて、ページの部品などをコンポーネントで制作していくやり方になるでしょうが、今回は「コンポーネントスタイル」をベースとして制作を行い、あるページや部分だけをクラスで開発するという方法をとってみます。</p>
<h3>Progressionプロジェクトの作成</h3>
<p><a href="http://www.flashdevelop.org/community/" target="_blank">Flashdevelop</a>と連携するため、一旦クラスベースでProgressionプロジェクトを作成します。<br />
Flashdevelopを使う予定のない場合は、そのままコンポーネントスタイルでプロジェクトを作成して、この章をすっ飛ばして読み進めてもかまいません。</p>
<p>AS3クラスを書くのにFlashDevelopが欠かせないのは僕みたいな中途半端なスクリプトコーダーには言わずもがななんですが、最初からコンポーネントスタイルでProgressionプロジェクトを作成してもFlashDevelopプロジェクトファイルも一緒に書き出せればいいんですが、どうも最初にクラスベースにしておかないとFlashDevelopプロジェクトファイルは書き出してくれないようで、だったら最初はコンポーネントスタイルにしておいて後から手作業でFlashDevelopプロジェクトファイルを作成する方法もあるのですが、いろいろと設定が面倒なので今回は「最初に一旦クラスベースで書き出しておいて、FlashDevelopプロジェクトファイルを書き出してもらってからflaファイルのほうはコンポーネントベースで制作できるようにする」ことを目的としています。</p>
<div id="attachment_323" class="wp-caption alignnone" style="width: 146px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688901.png"><img class="size-medium wp-image-323" title="Progressionプロジェクトを作成" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688901-136x300.png" alt="Progressionプロジェクトを作成" width="136" height="300" /></a><p class="wp-caption-text">Progressionプロジェクトを作成</p></div>
<p>種類を「クラス」に選んだら、ActionScriptタブの中にある「FlashDevelopプロジェクトを作成」にチェックを入れておきます。あとは「新しく作成する」ボタンで適当なフォルダにプロジェクトを作成します。</p>
<p>しばらく待つとプロジェクトが作成されてindex.flaが開くと思います。普通のクラスベースの開発でしたら、ここからそのままわしわしとクラスを書いていけばいいのですが、今回はこのプロジェクトをコンポーネントスタイルで行いたいので、そっちで制作するように変更してみましょう。</p>
<div id="attachment_324" class="wp-caption alignnone" style="width: 310px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688902.png"><img class="size-medium wp-image-324" title="ドキュメントクラスを消します" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688902-300x292.png" alt="ドキュメントクラスを消します" width="300" height="292" /></a><p class="wp-caption-text">ドキュメントクラスを消します</p></div>
<p>Flashのステージのプロパティウインドウにドキュメントクラスっちゅうものを指定する欄があります。クラスベースでProgressionプロジェクトを作成すると、クラスでの開発が行いやすいようにとあらかじめtaka:nium先生が入れて下さっているのですが、コンポーネントスタイルの開発には必要のないものなので心は痛みますがここの項目はさくっと消しちゃいましょう。</p>
<div id="attachment_325" class="wp-caption alignnone" style="width: 310px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688903.png"><img class="size-medium wp-image-325" title="ドキュメントクラスの設定を消します" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688903-300x292.png" alt="ドキュメントクラスの設定を消します" width="300" height="292" /></a><p class="wp-caption-text">ドキュメントクラスの設定を消します</p></div>
<p>要はFlashDevelopプロジェクトファイルを作って欲しかっただけで、利用するものは利用して必要のないものはどんどん消していくという、名付けて鬼のジゴロスタイル！</p>
<p>次にFlashメニューの「ウインドウ」→「コンポーネント」からコンポーネントウインドウを開いて、その中にある「Progression Loader」の「EasyCastingLoader」というコンポーネントを探してきて、これをステージにドラッグドロップします。</p>
<div id="attachment_326" class="wp-caption alignnone" style="width: 310px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688904.png"><img class="size-medium wp-image-326" title="ステージ上にEasyCastingLoaderコンポーネントを置こう" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688904-300x181.png" alt="シーン上にEasyCastingLoaderコンポーネントを置こう" width="300" height="181" /></a><p class="wp-caption-text">ステージ上にEasyCastingLoaderコンポーネントを置こう</p></div>
<p>今ステージ上に置いたEasyCastingLoaderを選択した状態で、Flashメニューの「ウインドウ」→「コンポーネントインスペクタ」からコンポーネントインスペクタウインドウを開きます。EasyCastingLoaderの設定画面が出てくると思うので、ここの「url」の欄に「easycasting.xml」と書き込んでおきましょう。</p>
<div id="attachment_337" class="wp-caption alignnone" style="width: 160px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688905.png"><img class="size-thumbnail wp-image-337" title="urlのところにeasycasting.xmlと書く" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e38397e383ade382b8e382a7e382afe38388e381aee4bd9ce688905-150x150.png" alt="urlのところにeasycasting.xmlと書く" width="150" height="150" /></a><p class="wp-caption-text">urlのところにeasycasting.xmlと書く</p></div>
<p>これで「クラスもところどころで書きたいのでFlashDevelopプロジェクトも作りつつコンポーネントスタイルメインで制作を行う」準備が整いました。</p>
<h3>Progressionシーンエディタの活用</h3>
<p>あとはコンポーネントスタイルで気楽に制作に取りかかりましょう。<br />
Flashメニューの「ウインドウ」→「他のパネル」→「Progression シーンエディタ」でシーンエディタを開きます。</p>
<div id="attachment_327" class="wp-caption alignnone" style="width: 310px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e382b7e383bce383b3e382a8e38387e382a3e382bf1.png"><img class="size-medium wp-image-327" title="気楽に、ってこのサイト気ぬきすぎです" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e382b7e383bce383b3e382a8e38387e382a3e382bf1-300x202.png" alt="気楽に、ってこのサイト気ぬきすぎです" width="300" height="202" /></a><p class="wp-caption-text">気楽に、ってこのサイト気ぬきすぎです</p></div>
<p>シーンエディタの詳しい使い方は<a href="http://progression.jp/ja/doc/tutorial/component/#item-scene" target="_blank">Progression公式ページのドキュメント、コンポーネントスタイルガイドの「シーンを作成する」</a>などを参考にしてみて下さい。<br />
シーンは「舞台」、キャストは「役者」など昔なつかしいFlashの概念を踏襲してて、ほとんど直感的に扱えると思います。</p>
<p>ちなみにシーンエディタでは、Flashで言うところのレイヤーの重なりと同じ概念としてキャストに「index」という数字を設定できます。<br />
これは数字が大きい方が前面に重なるものなので、サイトロゴやグローバルメニューなど常に前面に表示しておきたいキャストはこの「index」の数字を大きい数字にしておくと良いです。<br />
ただし「index」がゼロの場合だけは特別で、ここをゼロに設定しておくと常に一番前面に表示されるようです。<br />
もう、何が何でも絶対に表示されてないといけないキャストは（あ、それこそサイトロゴとか）ここをゼロに設定する方法も考えてみても良いでしょう。</p>
<p>ちなみにシーンエディタの「書き出し」→「キャストをシンボルとして書き出す」をするとよくわかるんですが、コンポーネントスタイルでのキャストというのは要はムービークリップの事です。<br />
ここらへんもよくできていて、今まで培ったムービークリップの技術を捨てることなく誰でも今日からでもProgressionを使用してサイト制作を容易にするための工夫が随所にちりばめられています。</p>
<div id="attachment_328" class="wp-caption alignnone" style="width: 310px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e382b7e383bce383b3e382a8e38387e382a3e382bf2.png"><img class="size-medium wp-image-328" title="キャストをシンボルとして書き出す" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e382b7e383bce383b3e382a8e38387e382a3e382bf2-300x129.png" alt="e382b7e383bce383b3e382a8e38387e382a3e382bf2" width="300" height="129" /></a><p class="wp-caption-text">キャストをシンボルとして書き出す</p></div>
<p>さっきからProgressionべたぼめで自分でも気持ち悪いですが、いやほんと使えば使うほどよくできてます。</p>
<p>最後にシーンエディタ上の「ファイル」→「名前をつけて保存」から（Flashメニューではなくシーンエディタのメニューです）今回のProgressionプロジェクトで作成したフォルダにある「deploy」というフォルダの中に「easycasting.xml」という名前でファイルを保存すれば完成です。</p>
<div id="attachment_329" class="wp-caption alignnone" style="width: 160px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e382b7e383bce383b3e382a8e38387e382a3e382bf3.png"><img class="size-thumbnail wp-image-329" title="easycasting.xmlという名前でdeployフォルダに保存" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e382b7e383bce383b3e382a8e38387e382a3e382bf3-150x150.png" alt="easycasting.xmlという名前でdeployフォルダに保存" width="150" height="150" /></a><p class="wp-caption-text">easycasting.xmlという名前でdeployフォルダに保存</p></div>
<h3>あとは各ページを作っていくだけ！</h3>
<p>基本的にあとはコンポーネントスタイルで制作していくだけなので、<a href="http://progression.jp/ja/doc/tutorial/component/" target="_blank">Progressionコンポーネントスタイルガイド</a>などを参考に、本当にActionScriptを一行も書かずにフルFlashサイトが出来てしまいます。</p>
<p>Progressionのバージョンが2と少し古いですが（現在のProgressionのバージョンは3）FlashPowerSessionでもお世話になっている<a href="http://www.dragon-ball.in/" target="_blank">琉球インクさん</a>の松竹さんがAdobeデベロッパーセンターに書かれた<a href="http://www.adobe.com/jp/devnet/flash/articles/progression_framework2.html" target="_blank">Progression Framework 2　初級編：ActionScriptを書かずにFlashサイトを簡単に構築する</a>という記事も参考になります。</p>
<p>繰り返しになりますがとにかくコンポーネントスタイルで制作すれば、ActionScriptの事なんか一行も考えずにページが出来ていくようになります（もちろんActionScriptを書いても良いです）。</p>
<h3>でも特定のページはクラスで書きたい</h3>
<p>いちおう今回の記事のヤマですが、他のページはコンポーネントだけで作りたいけどある特定のページだけはクラスで作っていきたい場合があります。</p>
<p>基本的にはただのクラスの継承なので、そもそもクラスベースで開発したい方にとっては当たり前すぎて有用な情報ではないのですが、まとめておきたいと思います。</p>
<p>例えば今回参考にしたシーンの中で「BbsPage」だけはクラスで作りたい場合、プロジェクトの中にBbsPageというクラスを作っておきます。今回はsrcフォルダの中に「myproject」フォルダを作り、さらにその中に「pages」というフォルダを作ってそこにクラスファイルを作成しました。<br />
（蛇足ですが僕はクラスベースで開発するときはSceneObjectクラスは「scenes」フォルダ、そのSceneObjectから直接読み込まれるCastなにがしクラスは「pages」フォルダを作りそれぞれその中に入れるようにしています）</p>
<div id="attachment_330" class="wp-caption alignnone" style="width: 160px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e382afe383a9e382b91.png"><img class="size-thumbnail wp-image-330" title="BbsPageクラスを作っておく" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e382afe383a9e382b91-150x150.png" alt="BbsPageクラスを作っておく" width="150" height="150" /></a><p class="wp-caption-text">BbsPageクラスを作っておく</p></div>
<p>クラスファイルの中身は、こんな感じでCastSpriteやSctMovieClipなどを継承しておけば、_onCastAddedや_onCastRemovedイベントも受け取ることが出来るのでとても便利です。</p>
<pre class="actionscript">package myproject.<span style="color: #006600;">pages</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Graphics</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 *
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BbsPage <span style="color: #0066CC;">extends</span> CastSprite
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * コンストラクタ
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> BbsPage<span style="color: #66cc66;">&#40;</span> initObject:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> initObject <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #000000; font-weight: bold;">var</span> p:Progression = <span style="color: #000000; font-weight: bold;">new</span> Progression<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;contact&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #000000; font-weight: bold;">var</span> g:Graphics = graphics;
&nbsp;
			g.<span style="color: #0066CC;">beginFill</span><span style="color: #66cc66;">&#40;</span>0xFF0000<span style="color: #66cc66;">&#41;</span>;
			g.<span style="color: #006600;">drawRect</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, p.<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span>, p.<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span><span style="color: #66cc66;">&#41;</span>;
			g.<span style="color: #0066CC;">endFill</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			alpha = <span style="color: #cc66cc;">0</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * ICastObject オブジェクトが AddChild コマンド、または AddChildAt コマンド経由でディスプレイリストに追加された場合に送出されます。
		 * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
		 */</span>
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onCastAdded<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// 実行したいコマンドを登録します。</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #808080; font-style: italic;">// 任意のコマンドを記述してください。</span>
				<span style="color: #000000; font-weight: bold;">new</span> DoTweener<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #66cc66;">&#123;</span> alpha:<span style="color: #cc66cc;">1</span>, <span style="color: #0066CC;">time</span>:<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * ICastObject オブジェクトが RemoveChild コマンド、または RemoveAllChild コマンド経由でディスプレイリストから削除された場合に送出されます。
		 * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
		 */</span>
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onCastRemoved<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// 実行したいコマンドを登録します。</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #808080; font-style: italic;">// 任意のコマンドを記述してください。</span>
				<span style="color: #000000; font-weight: bold;">new</span> DoTweener<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #66cc66;">&#123;</span> alpha:<span style="color: #cc66cc;">0</span>, <span style="color: #0066CC;">time</span>:<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>あとはFlash上のライブラリウインドウから「BbsPage」インスタンスのプロパティを選択して、継承するクラス（基本クラス）を「myproject.pages.BbsPage」と書き換えてやるだけで、本当に簡単にコンポーネントスタイルと連携を取ることができるようになります。</p>
<div id="attachment_332" class="wp-caption alignnone" style="width: 160px"><a href="http://utweb.jp/blog/wp-content/uploads/2009/05/e382afe383a9e382b92.png"><img class="size-thumbnail wp-image-332" title="基本クラスを自分の作ったクラスファイルに書き換えるだけ" src="http://utweb.jp/blog/wp-content/uploads/2009/05/e382afe383a9e382b92-150x150.png" alt="基本クラスを自分の作ったクラスファイルに書き換えるだけ" width="150" height="150" /></a><p class="wp-caption-text">基本クラスを自分の作ったクラスファイルに書き換えるだけ</p></div>
<h3>まとめ</h3>
<p>デザイナーとプログラマーの連携以外にも、「Progressionコンポーネントスタイルはマスターして次はクラスベースにも挑戦したいけど全部をクラスにするにはまだ難しくて敷居が高い」方も、こうしておくと基本はコンポーネントスタイル作っていって、特定のページだけクラスに挑戦することも出来るので非常にお勧めです。</p>
<p>うちでは普段はProgressionで制作するときは先ずクラスベースで作っておいて、ボタンなどちょっとした部品はコンポーネントを併用することの方が多いですが、今回まずデザインやアニメーションありきの案件の場合コンポーネントメインで作っておいて、ある特定のページだけ高度なことをしたかったのでクラスと連携させる方法を探ってみました。結果としてProgressionの_onCastAdded便利なCommand環境を捨てることなくすんなりとコンポーネントスタイルに組み込むことが出来たので制作スタイルの幅がよりいっそう広がったと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/321/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/321" />
	</item>
		<item>
		<title>ProgressionのCommandが良い感じ</title>
		<link>http://utweb.jp/blog/archives/303</link>
		<comments>http://utweb.jp/blog/archives/303#comments</comments>
		<pubDate>Wed, 20 May 2009 18:49:18 +0000</pubDate>
		<dc:creator>正宗</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://utweb.jp/blog/?p=303</guid>
		<description><![CDATA[こんにちは。
正宗です。
今日はProgressionのCommandのお話をしたいと思います。
毎度ながら僕個人の備忘録となっているので、誰も役に立たない情報ですが僕が便利だと感じるならそれでいいんです。
Flashサ [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。<br />
正宗です。<br />
今日はProgressionのCommandのお話をしたいと思います。<br />
毎度ながら僕個人の備忘録となっているので、誰も役に立たない情報ですが僕が便利だと感じるならそれでいいんです。</p>
<p>Flashサイト制作の上でもはや手放せないフレームワーク、その名も「<a href="http://progression.jp/ja/" target="_blank">Progression</a>」<br />
Scene管理も秀逸ですが僕がProgressionを使ってて何よりも惚れ惚れするのがCommandがよく練られていてとっても使いやすいところなのです。<br />
「こういうこともCommandで出来ないかな？」とリファレンスを読み読みしてると必ず上手いやり方が用意されていて、どんどん使っていくうちにいわゆる「Progression的な」コードの書き方に身が染まっていって毎日新しい発見があってコードを書くのがとても楽しいです。<br />
（もちろん、Progression的な書き方を強制されるわけでは無くって、我流の書き方も完全に許容されているところもこのフレームワークを好きな理由の一つです）<br />
ということで、今まで勉強してきたCommandの使い方の途中段階までをまとめておきたいと思います。</p>
<h3>基本のキホン</h3>
<p>まずCommandがどこで実行されるかですが、一番簡単なのは<br />
SceneObjectでしたら_onLoad、_onInit、_onGoto、_onUnloadの関数の中に直接addCommandしておく方法。<br />
CastSpriteやCastMovieClipなどは_onCastAddedや_onCastRemovedなんかに直接addCommandしておきます。<br />
このへんのシーン管理やイベント管理もとっても面白いんでいろいろとまとめたいところなんですが、今日のまとめはあくまでCommandだけにとどめておきたいと思います。</p>
<h3>SerialListとParallelList</h3>
<ul>
<li>SerialListは順番にコマンドを実行する</li>
<li>ParallelListは一度に同時にコマンドを実行する</li>
<li>SerialListに配列としてコマンドをaddCommandすればその配列内のコマンドはParallelListとして実行される</li>
<li>逆にParallelListに配列としてコマンドをaddCommandすればその配列内のコマンドはSerialListとして実行される</li>
<li>_onInitなんかの関数の中は最初はSerialList</li>
</ul>
<p>こんなところでしょうか。<br />
使い方はこんな感じ。</p>
<pre class="actionscript">&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> test<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">list</span>:SerialList = <span style="color: #000000; font-weight: bold;">new</span> SerialList<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">list</span>.<span style="color: #006600;">addCommand</span><span style="color: #66cc66;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">new</span> LoadURL<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hoge.xml&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #808080; font-style: italic;">//XMLの読み込みを開始</span>
		<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #006600;">latestData</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//読み込んだXMLを出力</span>
		<span style="color: #66cc66;">&#125;</span>,
		<span style="color: #66cc66;">&#91;</span>
			<span style="color: #000000; font-weight: bold;">new</span> DoTweener<span style="color: #66cc66;">&#40;</span>front, <span style="color: #66cc66;">&#123;</span> alpha:<span style="color: #cc66cc;">0</span>, <span style="color: #0066CC;">time</span>:<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>,<span style="color: #808080; font-style: italic;">//前面のMCを1秒かけて透明に</span>
			<span style="color: #000000; font-weight: bold;">new</span> DoTweener<span style="color: #66cc66;">&#40;</span>back, <span style="color: #66cc66;">&#123;</span> alpha:<span style="color: #cc66cc;">1</span>, <span style="color: #0066CC;">time</span>:<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #808080; font-style: italic;">//背面のMCも同時に1秒かけて不透明に</span>
		<span style="color: #66cc66;">&#93;</span>
	<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">list</span>.<span style="color: #006600;">execute</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//SerialListを実行</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>最初にSerialListで実行させているので、XMLの読み込みを待って完了したら自動的に次の処理に移ります。<br />
その後配列で登録してあるのでクロスフェードの処理はParallelListとして同時に実行されることになります。<br />
<a href="http://www.libspark.org/htdocs/as3/thread-files/document/" target="_blank">そうめん</a>もそうなんですが、もうaddEventListenerだらけで「えっと、ここが完了したら次こうなって…」と悩まされなくて済むようになりました。</p>
<h3>外部swfのクラスを使いたい</h3>
<p>こんだけイケてるCommandなのですから、シーンの読み込みの際に外部swfを取得してそこからクラスを参照するやり方も何か用意されているのではないかと思って調べてたら、やっぱりありました。<br />
LoadObjectといって、CastLoaderを監視するコマンドがありました。<br />
さすがtaka:nium先生！もう俺は一生Progressionについていくぜー！</p>
<pre class="actionscript">&nbsp;
package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">LoadObject</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">LoaderContext</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">ApplicationDomain</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Test <span style="color: #0066CC;">extends</span> CastSprite
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _loader:CastLoader;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _context:LoaderContext;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Test<span style="color: #66cc66;">&#40;</span> initObject:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> initObject <span style="color: #66cc66;">&#41;</span>;
			_loader = <span style="color: #000000; font-weight: bold;">new</span> CastLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context = <span style="color: #000000; font-weight: bold;">new</span> LoaderContext<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context.<span style="color: #006600;">applicationDomain</span> = ApplicationDomain.<span style="color: #006600;">currentDomain</span>;
		<span style="color: #66cc66;">&#125;</span>
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onCastAdded<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> DoTweener<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #66cc66;">&#123;</span> alpha:<span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">new</span> LoadObject<span style="color: #66cc66;">&#40;</span>_loader, <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hoge.swf&quot;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #66cc66;">&#123;</span>
					context:_context,
					onCastLoadComplete:<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
						<span style="color: #000000; font-weight: bold;">var</span> myDomain:ApplicationDomain = _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">applicationDomain</span>;
						<span style="color: #000000; font-weight: bold;">var</span> myClass:<span style="color: #000000; font-weight: bold;">Class</span> = _myDomain.<span style="color: #006600;">getDefinition</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;onigiri&quot;</span><span style="color: #66cc66;">&#41;</span> as <span style="color: #000000; font-weight: bold;">Class</span>;
						<span style="color: #000000; font-weight: bold;">var</span> mc:Sprite = <span style="color: #000000; font-weight: bold;">new</span> myClass<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
						addChild<span style="color: #66cc66;">&#40;</span>mc<span style="color: #66cc66;">&#41;</span>;
					<span style="color: #66cc66;">&#125;</span>
				<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">new</span> DoTweener<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #66cc66;">&#123;</span> alpha:<span style="color: #cc66cc;">1</span>, <span style="color: #0066CC;">time</span>:<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>実際にはLoadObjectのonCastLoadCompleteに登録しなくっても、そのままシリアルリストに次の処理を書いていってもよさげ。</p>
<p>だけどここで少しばかり問題が。<br />
上に挙げたサンプルはCastなにがしで処理を行っているので問題ないんだけれど、SceneObjectでこれをやろうとするとCommandの参照の問題が出てくるような気がする。</p>
<p>例えばある特定のScene以下からは"hoge.swf"を読み込んでその階層以下からのSceneでは"hoge.swf"を使い回したい場合</p>
<pre class="actionscript">&nbsp;
package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">LoadObject</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">LoaderContext</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">ApplicationDomain</span>;
	<span style="color: #0066CC;">import</span> HogePage;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HogeScene <span style="color: #0066CC;">extends</span> SceneObject
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _page:HogePage;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _singleton:Singleton;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _loader:CastLoader;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _context:LoaderContext;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> HogeScene<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>:<span style="color: #0066CC;">String</span> = <span style="color: #000000; font-weight: bold;">null</span>, initObject:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>, initObject <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			title = <span style="color: #ff0000;">&quot;hogehogeシーン&quot;</span>;
&nbsp;
			_loader = <span style="color: #000000; font-weight: bold;">new</span> CastLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context = <span style="color: #000000; font-weight: bold;">new</span> LoaderContext<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context.<span style="color: #006600;">applicationDomain</span> = ApplicationDomain.<span style="color: #006600;">currentDomain</span>;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> myDomain:ApplicationDomain = _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">applicationDomain</span>;
			_page = <span style="color: #000000; font-weight: bold;">new</span> HogePage<span style="color: #66cc66;">&#40;</span>myDomain<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeAllScenes<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> fugaHelp:DressHelpScene = <span style="color: #000000; font-weight: bold;">new</span> fugaHelpScene<span style="color: #66cc66;">&#40;</span>myDomain<span style="color: #66cc66;">&#41;</span>;
			fugaHelp.<span style="color: #0066CC;">name</span> = <span style="color: #ff0000;">&quot;help&quot;</span>;
			addScene<span style="color: #66cc66;">&#40;</span>fugaHelp<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onLoad<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> LoadObject<span style="color: #66cc66;">&#40;</span>_loader, <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;dressshop.swf&quot;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #66cc66;">&#123;</span>
					context:_context
				<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,
				init,
				<span style="color: #000000; font-weight: bold;">new</span> AddChild<span style="color: #66cc66;">&#40;</span>progression.<span style="color: #006600;">container</span>, _page<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onInit<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onGoto<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onUnload<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> RemoveChild<span style="color: #66cc66;">&#40;</span>progression.<span style="color: #006600;">container</span>, _page<span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
					_loader.<span style="color: #006600;">unload</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>こんなふうに書くと動かなくなる。<br />
何故これがだめなのかは</p>
<pre class="actionscript">&nbsp;
package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">LoadObject</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">LoaderContext</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">ApplicationDomain</span>;
	<span style="color: #0066CC;">import</span> HogePage;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HogeScene <span style="color: #0066CC;">extends</span> SceneObject
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _page:HogePage;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _singleton:Singleton;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _loader:CastLoader;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _context:LoaderContext;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> HogeScene<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>:<span style="color: #0066CC;">String</span> = <span style="color: #000000; font-weight: bold;">null</span>, initObject:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>, initObject <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			title = <span style="color: #ff0000;">&quot;hogehogeシーン&quot;</span>;
&nbsp;
			_loader = <span style="color: #000000; font-weight: bold;">new</span> CastLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context = <span style="color: #000000; font-weight: bold;">new</span> LoaderContext<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context.<span style="color: #006600;">applicationDomain</span> = ApplicationDomain.<span style="color: #006600;">currentDomain</span>;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> myDomain:ApplicationDomain = _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">applicationDomain</span>;
			_page = <span style="color: #000000; font-weight: bold;">new</span> HogePage<span style="color: #66cc66;">&#40;</span>myDomain<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeAllScenes<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> fugaHelp:DressHelpScene = <span style="color: #000000; font-weight: bold;">new</span> fugaHelpScene<span style="color: #66cc66;">&#40;</span>myDomain<span style="color: #66cc66;">&#41;</span>;
			fugaHelp.<span style="color: #0066CC;">name</span> = <span style="color: #ff0000;">&quot;help&quot;</span>;
			addScene<span style="color: #66cc66;">&#40;</span>fugaHelp<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, _page<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onLoad<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> LoadObject<span style="color: #66cc66;">&#40;</span>_loader, <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;dressshop.swf&quot;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #66cc66;">&#123;</span>
					context:_context
				<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,
				init,
				<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Trace</span><span style="color: #66cc66;">&#40;</span>_page<span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">new</span> AddChild<span style="color: #66cc66;">&#40;</span>progression.<span style="color: #006600;">container</span>, _page<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onInit<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onGoto<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onUnload<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> RemoveChild<span style="color: #66cc66;">&#40;</span>progression.<span style="color: #006600;">container</span>, _page<span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
					_loader.<span style="color: #006600;">unload</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>こう書いてみるとなんとなくわかるんだけれど、じゃあどうすればいいかというと僕はこうしました。</p>
<pre class="actionscript">&nbsp;
package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">casts</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">loader</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">*</span>;
	<span style="color: #0066CC;">import</span> jp.<span style="color: #006600;">progression</span>.<span style="color: #006600;">commands</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">LoadObject</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">LoaderContext</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">ApplicationDomain</span>;
	<span style="color: #0066CC;">import</span> HogePage;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HogeScene <span style="color: #0066CC;">extends</span> SceneObject
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _page:HogePage;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _singleton:Singleton;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _loader:CastLoader;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _context:LoaderContext;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> HogeScene<span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>:<span style="color: #0066CC;">String</span> = <span style="color: #000000; font-weight: bold;">null</span>, initObject:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">name</span>, initObject <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			title = <span style="color: #ff0000;">&quot;hogehogeシーン&quot;</span>;
&nbsp;
			_loader = <span style="color: #000000; font-weight: bold;">new</span> CastLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context = <span style="color: #000000; font-weight: bold;">new</span> LoaderContext<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_context.<span style="color: #006600;">applicationDomain</span> = ApplicationDomain.<span style="color: #006600;">currentDomain</span>;
&nbsp;
			_page = <span style="color: #000000; font-weight: bold;">new</span> HogePage<span style="color: #66cc66;">&#40;</span>myDomain<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> myDomain:ApplicationDomain = _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">applicationDomain</span>;
			<span style="color: #808080; font-style: italic;">//_page = new HogePage(myDomain);</span>
			_page.<span style="color: #006600;">myDomain</span>;
&nbsp;
			removeAllScenes<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> fugaHelp:DressHelpScene = <span style="color: #000000; font-weight: bold;">new</span> fugaHelpScene<span style="color: #66cc66;">&#40;</span>myDomain<span style="color: #66cc66;">&#41;</span>;
			fugaHelp.<span style="color: #0066CC;">name</span> = <span style="color: #ff0000;">&quot;help&quot;</span>;
			addScene<span style="color: #66cc66;">&#40;</span>fugaHelp<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, _page<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onLoad<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> LoadObject<span style="color: #66cc66;">&#40;</span>_loader, <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;dressshop.swf&quot;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #66cc66;">&#123;</span>
					context:_context
				<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,
				init,
				<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Trace</span><span style="color: #66cc66;">&#40;</span>_page<span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">new</span> AddChild<span style="color: #66cc66;">&#40;</span>progression.<span style="color: #006600;">container</span>, _page<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onInit<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onGoto<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		protected override <span style="color: #000000; font-weight: bold;">function</span> _onUnload<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addCommand<span style="color: #66cc66;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> RemoveChild<span style="color: #66cc66;">&#40;</span>progression.<span style="color: #006600;">container</span>, _page<span style="color: #66cc66;">&#41;</span>,
				<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
					_loader.<span style="color: #006600;">unload</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HogePage <span style="color: #0066CC;">extends</span> CastSprite
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _myDomain:ApplicationDomain;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> myDomain<span style="color: #66cc66;">&#40;</span>value:ApplicationDomain<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			_myDomain = value;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>他にもどうしても_onLoadのときに動的にクラスを生成しなければならなかったりした場合はもうちょっと違う書き方をするんだけど、僕の書いたどれもが根本的にCommandで処理できる流れになってなくて、ものすごい気持ち悪いです。<br />
ひとえに僕がCommand内のthisの参照をよくわかっていないからだとは思いますが、もうちょっとCmmandだけで完結できる方法を勉強してみたいと思います。<br />
目指せ！ProgressionのCommandマスター！</p>
]]></content:encoded>
			<wfw:commentRss>http://utweb.jp/blog/archives/303/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://utweb.jp/blog/archives/303" />
	</item>
	</channel>
</rss>

