<?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/"
	>

<channel>
	<title>Katapad Design &#187; ActionScript</title>
	<atom:link href="http://katapad.com/wp/category/actionscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://katapad.com/wp</link>
	<description>スーパー肩パッドですけどー、ActionScriptでくさい飯じゃないほうを食べた～い！</description>
	<lastBuildDate>Thu, 24 Dec 2009 11:11:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>BulkLoaderで「もう悩まない！」ための6つのtipsをまずは14日間で売上No.1！！</title>
		<link>http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/</link>
		<comments>http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 00:07:43 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=424</guid>
		<description><![CDATA[海外製のライブラリは日本語の情報が少なくて、英語のASDocやwikiを見たりしますよね。でも英語って読むのが難しいですよね…。 僕なんかね、キィーーッ！！ってなりますね。ぜんぜん読めないから。みなさんもキィーーッ！！ってなってますよね。でもBulkLoaderに関しては安心してください。もう、傷つく事に怯えなくていいんです。 BulkLoaderプロジェクトのDebeloperGuideってところにおトク情報がありました BulkLoaderに同梱されているサンプルはほとんど説明がないのですが、GoogleCodeのプロジェクトのwikiに結構な情報がありました。 http://code.google.com/p/bulk-loader/wiki/DeveloperGuide このうち、おトク情報を6つピックアップすることにしました。以下目次がわりのページ内リンクです。 weightプロパティで各Itemのパーセントの重み付けをして、精度のいいパーセントを取得する BulkLoaderのインスタンスはプールされている stringSubstitutionsでパスの切り替えなどができる 設定を外部ファイル化して勝手にロードしてくれるLazyBulkLoader add()するときのプロパティ一覧 一つでもエラーがあると止まってしまうから、エラーハンドリングしとこう 1. weightプロパティで各Itemのパーセントの重み付けをして、精度のいいパーセントを取得する この間「超便利なローダーBulkLoaderの落とし穴にハマってきました」という記事を書きました。その中で、パーセント取得がちょっと難しいなーという話をしました。 よくよく調べてみると、もうひとつ打つ手がありました。 BulkLoaderのドキュメント・見出し「By weight」のところ http://code.google.com/p/bulk-loader/wiki/ReportingLoadingProgress ここをかいつまんで説明しますね。あと、これから「Item」と呼ぶものは「ロードするもの」っていう意味で使います。 weightってこんな感じで動いてる ロードするItemが10個あって それぞれのItemにweightが設定されていない というケースでは、各Itemに割り当てられるパーセントは1/10、つまり10％ずつです。 このうち1つのItemがFLVなどで他のファイルより重いときにweightを設定します。この重いItemをweight=11と設定しましょう。あと、Itemのデフォルトのweightは1ということを覚えておいてください。 _bulkloader.add(&#34;hoge.flv&#34;, { type: BulkLoader.TYPE_VIDEO, weight: 11 } ); すると、 Item 割り当てられるパーセント weightを11にしたItem 11/20 他のItem 1/20 こんな感じであがります。元の分母はItem数なので10。それに、増えた重みを足して10+10で分母が20になります。たぶん！これで、FLVのパーセントが55%分を占めるようになり、期待している値に近づきました。 このweightが設定されたパーセントを取得するにはweightPercentを使用します。 weightPercentでもうすこし正確なパーセント表示 BulkProgressEvent.weightPercentにweightを考慮したパーセントが入っています。 (item._bytesLoaded / item._bytesTotal) * item.weight; いたってシンプルですね。こういった形で加算されていくので、かなり実際と近いパーセントが取得できそうです。 weightの設定にひと手間かける分、ratioLoadedやbytesLoadedよりもわりと正確な値を取得できます。 2.BulkLoaderのインスタンスはプールされている BulkLoaderのインスタンスはBulkLoaderクラスの静的なプロパティに保存されていて、いつでも再利用できるようになっています。 BulkLoaderクラスのstaticメソッドには取得・破棄の2種類があります。 //インスタンスの取得 [...]]]></description>
			<content:encoded><![CDATA[				<div class="outline">
				<p class="keyVisual"><img src="http://katapad.com/wp/upload_img/2009/10/keyVisual_bulk2.jpg" width="608" height="200" alt="" /></p>
				<p>海外製のライブラリは日本語の情報が少なくて、英語のASDocやwikiを見たりしますよね。でも英語って読むのが難しいですよね…。</p>
				<p>僕なんかね、キィーーッ！！ってなりますね。ぜんぜん読めないから。みなさんもキィーーッ！！ってなってますよね。でもBulkLoaderに関しては安心してください。もう、傷つく事に怯えなくていいんです。</p>
				</div>
				<div class="section">
				<h2>BulkLoaderプロジェクトのDebeloperGuideってところにおトク情報がありました</h2>
				<p>BulkLoaderに同梱されているサンプルはほとんど説明がないのですが、GoogleCodeのプロジェクトのwikiに結構な情報がありました。</p>
				<p><a href="http://code.google.com/p/bulk-loader/wiki/DeveloperGuide">http://code.google.com/p/bulk-loader/wiki/DeveloperGuide</a></p>
				<p>このうち、<em>おトク情報を6つ</em>ピックアップすることにしました。<br />以下目次がわりのページ内リンクです。</p>
				<ol>
				<li><a href="#bulk2_weight"><code>weight</code>プロパティで各Itemのパーセントの重み付けをして、精度のいいパーセントを取得する</a></li>
				<li><a href="#bulk2_instance_pool"><code>BulkLoader</code>のインスタンスはプールされている</a></li>
				<li><a href="#bulk2_var"><code>stringSubstitutions</code>でパスの切り替えなどができる</a></li>
				<li><a href="#bulk2_lazy">設定を外部ファイル化して勝手にロードしてくれる<code>LazyBulkLoader</code></a><code></code></li>
				<li><a href="#bulk2_addprops"><code>add()</code>するときのプロパティ一覧</a></li>
				<li><a href="#bulk2_errorhandler">一つでもエラーがあると止まってしまうから、エラーハンドリングしとこう</a></li>
				</ol>
				</div>
				<div class="section" id="bulk2_weight">
				<h2>1. weightプロパティで各Itemのパーセントの重み付けをして、精度のいいパーセントを取得する</h2>
				<p>この間「<a href="http://katapad.com/wp/2009/04/17/nice_loade/">超便利なローダーBulkLoaderの落とし穴にハマってきました</a>」という記事を書きました。その中で、パーセント取得がちょっと難しいなーという話をしました。</p>
				<p>よくよく調べてみると、もうひとつ打つ手がありました。</p>
				<p>BulkLoaderのドキュメント・見出し「By weight」のところ<br />
					<a href="http://code.google.com/p/bulk-loader/wiki/ReportingLoadingProgress">http://code.google.com/p/bulk-loader/wiki/ReportingLoadingProgress</a></p>
				<p>ここをかいつまんで説明しますね。<br />あと、これから「Item」と呼ぶものは「ロードするもの」っていう意味で使います。</p>
				<div class="section">
				<h3>weightってこんな感じで動いてる</h3>
				<ul>
				<li>ロードするItemが10個あって</li>
				<li>それぞれのItemに<code>weight</code>が設定されていない</li>
				</ul>
				<p>というケースでは、各Itemに割り当てられるパーセントは<em>1/10、つまり10％ずつ</em>です。</p>
				<p>このうち1つのItemがFLVなどで他のファイルより重いときに<code>weight</code>を設定します。この重いItemを<code>weight=11</code>と設定しましょう。あと、Itemのデフォルトの<code>weight</code>は1ということを覚えておいてください。</p>
				<pre><code>_bulkloader.add(&quot;hoge.flv&quot;, { type: BulkLoader.TYPE_VIDEO, weight: 11 } );</code></pre>
<p>すると、</p>
<table>
<thead>
<tr>
<th scope="col">Item</th>
<th scope="col">割り当てられるパーセント</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">weightを11にしたItem</th>
<td>11/20</td>
</tr>
<tr>
<th scope="row">他のItem</th>
<td>1/20</td>
</tr>
</tbody>
</table>
<p>こんな感じであがります。元の分母はItem数なので10。それに、増えた重みを足して10+10で分母が20になります。たぶん！これで、FLVのパーセントが55%分を占めるようになり、期待している値に近づきました。</p>
<p>このweightが設定されたパーセントを取得するには<em>weightPercent</em>を使用します。</p>
</p></div>
<div class="section">
<h3>weightPercentでもうすこし正確なパーセント表示</h3>
<p><code>BulkProgressEvent.weightPercent</code>にweightを考慮したパーセントが入っています。</p>
<pre><code>(item._bytesLoaded / item._bytesTotal) * item.weight;</code></pre>
				<p>いたってシンプルですね。こういった形で加算されていくので、かなり実際と近いパーセントが取得できそうです。</p>
				<p><code>weight</code>の設定にひと手間かける分、<code>ratioLoaded</code>や<code>bytesLoaded</code>よりもわりと正確な値を取得できます。</p>
				</p></div>
				</div>
				<div class="section" id="bulk2_instance_pool">
				<h2><code>2.BulkLoader</code>のインスタンスはプールされている</h2>
				<p><code>BulkLoader</code>のインスタンスは<code>BulkLoader</code>クラスの静的なプロパティに保存されていて、いつでも再利用できるようになっています。</p>
				<p><code>BulkLoader</code>クラスのstaticメソッドには取得・破棄の2種類があります。</p>
				<pre><code>//インスタンスの取得
BulkLoader.getLoader(name);</code></pre>
				<p>破棄メソッドについては、すべての<code>BulkLoader</code>インスタンスを削除するものしか用意されていないようです。</p>
				<pre><code>BulkLoader.removeAllLoaders();</code></pre>
<p>再利用しないのであれば、removeするのがいいでしょう。</p>
</div>
<div class="section" id="bulk2_var">
<h2><code>3.stringSubstitutions</code>でパスの切り替えなどができる</h2>
<p>ロードしたいパスに変数ぽいものを仕込んで柔軟性を上げることができます。</p>
<pre><code>_bulkLoader.stringSubstitutions = {
	&quot;base_path&quot;: &quot;http://example.com/test/&quot;
}
_bulkLoader.add(&quot;{base_path}test.jpg&quot;);
// これが→http://example.com/test/test.jpg に変換されます。
</code></pre>
				<p>テスト用パスと、本番用のパスを変えるときに便利そうですね。</p>
				</div>
				<div class="section" id="bulk2_lazy">
				<h2>4.設定を外部ファイル化して勝手にロードしてくれる<code>LazyBulkLoader</code></h2>
				<p>ロードしたいItemとその設定を書いたxml・jsonを書くだけで、自動でロードしてくれるクラスが<code>LazyBulkLoader</code>です。以下の2種類あります。</p>
				<ol>
				<li>LazyXMLLoader</li>
				<li>LazyJSONLoader</li>
				</ol>
				<p>xml・json内部で設定できることはasで書けることとほぼ同じだと思われます。以下のxmlを見るとよくわかります。</p>
				<p><a href="http://www.emptywhite.com/bulkloader-assets/lazyloader.xml">BulkloaderのLazyサンプルに同梱されているサンプルxml</a></p>
				<p>使い方はBulkLoaderのサンプルに含まれている<br />
						/examples/serialized-loaders/SerializedTestMain.as<br />
					に書いてあります。</p>
				<p>使い方は簡単です。</p>
				<pre><code>lazy  = new LazyXMLLoader(&quot;http://www.emptywhite.com/bulkloader-assets/lazyloader.xml&quot;, &quot;theLazyLoader&quot;)
lazy.addEventListener(LazyBulkLoader.LAZY_COMPLETE, onLazyInfoLoaded); //設定xmlを読み込んだときのハンドラ。特に何かするときだけ使う
lazy.addEventListener(Event.COMPLETE, onAllLoaded); //すべてのItemがロードされたら（いつもの）
lazy.addEventListener(ProgressEvent.PROGRESS, onAllProgress); //ロードのプログレス（いつもの）</code></pre>
				<p>AS側でやることがほとんどなくなるように見えますね。ロードしたあとのパースにしわ寄せがきますが、うまく使いこなせば楽になるかもしれません。</p>
				</div>
				<div class="section" id="bulk2_addprops">
				<h2>5.<code>add()</code>するときのプロパティ一覧</h2>
				<p>ASDocではわかりにくいので超意訳してみました。</p>
				<table>
				<thead>
				<tr>
				<th scope="col">プロパティ</th>
				<th scope="col">Classのconst</th>
				<th scope="col">データ型</th>
				<th scope="col">説明</th>
				</tr>
				</thead>
				<tbody>
				<tr>
				<th scope="row">preventCache</th>
				<td>PREVENT_CACHING</td>
				<td>Boolean</td>
				<td>urlにランダム文字列を付与して、キャッシュを防ぐかどうか</td>
				</tr>
				<tr>
				<th scope="row">id</th>
				<td>ID</td>
				<td>String</td>
				<td>getXML()などで取得するためのID。とくに指定しないとurlがIDになる</td>
				</tr>
				<tr>
				<th scope="row">priority</th>
				<td>PRIORITY</td>
				<td>int</td>
				<td>読み込みの優先順位。intが大きい順に読み込む。</td>
				</tr>
				<tr>
				<th scope="row">maxTries</th>
				<td>MAX_TRIES</td>
				<td>int</td>
				<td>ロード失敗したときに何回リトライしにいくか。デフォは3</td>
				</tr>
				<tr>
				<th scope="row">weight</th>
				<td>WEIGHT</td>
				<td>int</td>
				<td> weightPercentを使うときのパーセントの重み</td>
				</tr>
				<tr>
				<th scope="row">headers</th>
				<td>HEADERS</td>
				<td>Array</td>
				<td>追加のリクエストヘッダ</td>
				</tr>
				<tr>
				<th scope="row">context</th>
				<td>CONTEXT</td>
				<td>LoaderContext or SoundLoaderContext</td>
				<td>追加のContext</td>
				</tr>
				<tr>
				<th scope="row">pausedAtStart</th>
				<td>PAUSED_AT_START</td>
				<td>Boolean</td>
				<td>VideoItemのみ。nestreamがロードした直後からVideoを再生するかどうか   </td>
				</tr>
				</tbody>
				</table>
				</div>
				<div class="section" id="bulk2_errorhandler">
				<h2>6.	一つでもエラーがあると止まってしまうから、エラーハンドリングしとこう</h2>
				<p><code>IO_ERROR</code>やセキュリティエラーが発生したら、そのItemは失敗とみなされ放置されます。放置されると「すべてのItemがロードされました」というイベント<code>COMPLETE</code>が呼ばれなくなります。</p>
				<p>以下のようにエラーハンドリングすると、まあ、なんかできるでしょう！</p>
				<pre><code>_bulkLoader.addEventListener(ErrorEvent.ERROR, errorHandler)
private function errorHandler(e:ErrorEvent):void
{
 	//失敗したファイルをremoveする
	_bulkLoader.removeFailedItems();
 	//まだファイルのロードが残ってたら
	if (_bulkLoader.isRunning)
	{
		//コンプリートイベント待つなどする
	}
	else
	{
		//失敗したやつ以外は終了したので、終了処理に移る
		bulkLoadComplete(null);
	}

}</code></pre>
				</div>
				<div class="section">
				<h2>MultiProgressManagerのBulkLoaderのモデルも対応させました</h2>
				<p>ついでに、Sparkにコミットした<a href="http://katapad.com/wp/2009/08/25/multiprogressmanager/">MultiProgressManager</a>のBulkLoaderのモデルもweightPecentに対応させました。だいぶまともな動作になりそうです。</p>
				</div>
				<div class="section">
				<h2>ハイ！ということでね！</h2>
				<p>今回はBulkLoaderを眺めるだけの記事でしたー。</p>
				<p>特に何も茶々を入れなかったので、期待してくれてたみんなからは大ブーイングだね！むしろ大ブーイングの方が嬉しい！「今回みたいに普通に書いてよ。しょうもないこと書かんでいいから」とか思われたくないんです！</p>
				<p>い、イヤー！心の声が聞こえるー！！それ以上言わないで！！やめてー！！ロマンティックとめてー！！もう、傷つく事に怯えたくないー！キィーーッ！！</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>複数ロードのプログレスを一本化できる「マルチプログレスマネージャー」で幸運パワーを掴め！</title>
		<link>http://katapad.com/wp/2009/08/25/multiprogressmanager/</link>
		<comments>http://katapad.com/wp/2009/08/25/multiprogressmanager/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 00:25:52 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=393</guid>
		<description><![CDATA[パーセント表示のとき、ちょっと面倒な複数のプログレスの監視 たくさん外部ファイルを読み込むコンテンツを作る際、ローディングの表示ををまとめるのって厄介だったりします。 そこで、あらゆるProgressEventをまとめちゃおうというクラスがマルチプログレスマネージャー（MultiProgressManager）です。 Spark Projectにコミットしました！ http://www.libspark.org/svn/as3/MultiProgressManager リポジトリの中にサンプルも同梱しています。サンプルの解説はこのページの下のほうでやっています。 リポジトリブラウザはこちら 複数ロードのプログレスが多いと、ホントやっかいですよね！ 最初のロード画面で、以下のような流れを行うFlashは比較的多いですよね。 PreloaderからメインのSWFを読むプログレス xmlを読むプログレス 画像を読むプログレス 読み込んだ画像などからビルドするのに時間がかかるときのプログレス ようやくコンテンツがスタート わかりにくい図にするとこのような感じです。 これらを最初にまとめて読み込んで、パーセントをうまく100%にまとめようとすると、下図のように、よくわからないことになります。 Preloaderがloader経由でmain.swfを読んで、そのプログレスを監視して、main.swf側でconfig.xmlを読んで、その中の&#8230;、ああー、もうややこしいわ！30歳近くなったし、将来に不安あるし、湿度高いし、イライラするわ！ そんな悩めるFlasherにお届けするのが今回のマルチプログレスマネージャー！ 使い方はとても簡単！面倒だったパーセント表示が、たちどころにまとまります！ マルチプログレスマネージャーは、パーセント表示のMVCのM（モデル）部分 マルチプログレスマネージャーはモデルに徹します。大きな流れとしては以下の3点！ MultiProgressManagerのインスタンスを作って それぞれのプログレスを見張るをモデルを突っ込むと、 全部をまとめて0～1までに変換された進捗率が吐き出されます //マルチプログレスマネージャーのインスタンス生成 _progressManager = new MultiProgressManager(); //ローダーのプログレスを70%に設定して突っ込む var loader:Loader = new Loader(); var model:AbstractProgressModel = new ProgressEventModel(loader.contentLoaderInfo, 0.7); _progressManager.addProgress(model); //他の素材読み込みを残り30%に割り当てて突っ込む var urlLoader:URLLoader = new URLLoader(); _progressManager.addProgress(new ProgressEventModel(urlLoader, 0.3); //読み込み開始 _progressManager.start(); loader.load(new [...]]]></description>
			<content:encoded><![CDATA[				<p class="keyVisual"><img src="http://katapad.com/wp/upload_img/2009/08/keyVisual_multiprg.jpg" width="608" height="200" alt="" /></p>
				<div class="section">
				<h2>パーセント表示のとき、ちょっと面倒な複数のプログレスの監視</h2>
				<p>たくさん外部ファイルを読み込むコンテンツを作る際、ローディングの表示ををまとめるのって厄介だったりします。</p>
				<p>そこで、<strong>あらゆるProgressEventをまとめちゃおうというクラスがマルチプログレスマネージャー（MultiProgressManager）</strong>です。</p>
				<p>Spark Projectにコミットしました！</p>
				<ul>
				<li><a href="http://www.libspark.org/svn/as3/MultiProgressManager">http://www.libspark.org/svn/as3/MultiProgressManager</a></li>
				<li><a href="http://www.libspark.org/svn/as3/MultiProgressManager/trunk/sample">リポジトリの中にサンプル</a>も同梱しています。<em>サンプルの解説は<a href="#multiProgressSample">このページの下のほう</a>でやっています</em>。</li>
				<li><a href="http://www.libspark.org/browser/as3/MultiProgressManager">リポジトリブラウザはこちら</a></li>
				</ul>
				</div>
				<div class="section">
				<h2>複数ロードのプログレスが多いと、ホントやっかいですよね！</h2>
				<p>最初のロード画面で、以下のような流れを行うFlashは比較的多いですよね。</p>
				<ol>
				<li>PreloaderからメインのSWFを読むプログレス</li>
				<li>xmlを読むプログレス</li>
				<li>画像を読むプログレス</li>
				<li>読み込んだ画像などからビルドするのに時間がかかるときのプログレス</li>
				<li>ようやくコンテンツがスタート</li>
				</ol>
				<p>わかりにくい図にするとこのような感じです。<br />
					<img src="http://katapad.com/wp/upload_img/2009/08/m_normal1.png" alt="m_normal1" title="m_normal1" width="406" height="271" class="alignnone size-medium wp-image-403" /></p>
				<p>これらを最初にまとめて読み込んで、パーセントをうまく100%にまとめようとすると、下図のように、よくわからないことになります。<br />
				<img src="http://katapad.com/wp/upload_img/2009/08/m_gonyo1.png" alt="m_gonyo1" title="m_gonyo1" width="418" height="358" class="alignnone size-medium wp-image-402" /></p>
				<p>Preloaderがloader経由でmain.swfを読んで、そのプログレスを監視して、main.swf側でconfig.xmlを読んで、その中の&hellip;、<strong>ああー、もうややこしいわ！30歳近くなったし、将来に不安あるし、湿度高いし、イライラするわ！</strong></p>
				<p>そんな悩めるFlasherにお届けするのが今回のマルチプログレスマネージャー！</p>
				</div>
				<div class="section">
				<h2>使い方はとても簡単！面倒だったパーセント表示が、たちどころにまとまります！</h2>
				<div class="section">
				<h3>マルチプログレスマネージャーは、パーセント表示のMVCのM（モデル）部分</h3>
				<p>マルチプログレスマネージャーはモデルに徹します。大きな流れとしては以下の3点！</p>
				<ol>
				<li><code>MultiProgressManager</code>のインスタンスを作って</li>
				<li>それぞれのプログレスを見張るをモデルを突っ込むと、</li>
				<li>全部をまとめて0～1までに変換された進捗率が吐き出されます</li>
				</ol>
				<pre>//マルチプログレスマネージャーのインスタンス生成
_progressManager = new MultiProgressManager();
//ローダーのプログレスを70%に設定して突っ込む
var loader:Loader = new Loader();
var model:AbstractProgressModel = new ProgressEventModel(loader.contentLoaderInfo, 0.7);
_progressManager.addProgress(model);

//他の素材読み込みを残り30%に割り当てて突っ込む
var urlLoader:URLLoader = new URLLoader();
_progressManager.addProgress(new ProgressEventModel(urlLoader, 0.3);

//読み込み開始
_progressManager.start();
loader.load(new URLRequest(&quot;main.swf&quot;));
urlLoader.load(new URLRequest(&quot;config.xml&quot;));</pre>
				</p></div>
				<div class="section">
				<h3>パーセント表示はMultiProgressManagerのイベントを監視するだけ。それもプログレスとコンプリートの2つだけ！</h3>
				<p>MultiProgressManagerを稼動させるとプログレスのイベントが通知されるのでそれをリスンします。</p>
				<pre>//このイベントにまとめられたパーセントのプログレスが入っています。
_progressManager.addEventListener(ProgressPercentEvent.PERCENT_PROGRESS, progressHandler);
//パーセントの完了イベント
_progressManager.addEventListener(ProgressPercentEvent.PERCENT_COMPLETE, completeHandler);

//プログレスのイベントハンドラ
private function progressHandler(event:ProgressPercentEvent):void
{
	//パーセント表示を更新
	loadingBar_mc.scaleX = event.percent; //event.percentは0～1までのNumber
}
private function completeHandler(event:ProgressPercentEvent):void
{
	trace("終了");
}</pre>
				</p></div>
				<div class="section">
				<h3>さっきのわかりにくい図が驚くほど簡単に！</h3>
				<p>担当すべきクラスを分けることで、みるみるあっさりしました！これこそ宇宙の波動！</p>
				<p><a href="http://katapad.com/wp/upload_img/2009/08/m_result1.png"><img src="http://katapad.com/wp/upload_img/2009/08/m_result1-300x269.png" alt="m_result1" title="m_result1" width="300" height="269" class="alignnone size-medium wp-image-404" /></a></p>
				<p>UMLっぽくするとこうなります（でっちあげのUMLです）<br />
				<img src="http://katapad.com/wp/upload_img/2009/08/m_uml.png" alt="m_uml" title="m_uml" width="500" height="217" class="alignnone size-medium wp-image-405" /></p>
				</p></div>
				<div class="section">
				<h3>モデルの拡張も簡単！いろんなプログレスに対応できる！</h3>
				<p><code>AbstractProgressModel</code>を継承すれば、標準のプログレス以外にも対応できます。しかも、考えるのは2点だけ！</p>
				<ol>
				<li>progressイベントをリスンすることを書く</li>
				<li>完了したときの処理を書く</li>
				</ol>
				<p>を書くだけで簡単に拡張できます。同梱しているBulkLoader用の<code>BulkLoaderProgressModel</code>がまさにこれです。</p>
				</p></div>
				<div class="section">
				<h3>「main.swfは全体の50%くらい、config.xmlは10%くらいで」といった、割り当てもサクっとできる！！</h3>
				<p>個別にプログレスを監視するクラス（<code>AbstractProgressModel</code>）には<code>percentRange</code>というプロパティがあります。こいつが「main.swfは全体の50%にしよう」といったプロパティになります。</p>
				<pre>//50%で読み込む
var model:AbstractProgressModel = new ProgressEventModel(loader.contentLoaderInfo, <em>0.5</em>);</pre>
				<p>下図のような割合でやるときも、引数を割り当てるだけで実現できちゃいます。<br />
							<img src="http://katapad.com/wp/upload_img/2009/08/m_fig3.png" width="193" height="227" alt="" /></p>
				</p></div>
				<div class="section">
				<h3>さらに、今回は「パーセントが上昇するときのスムージング（線形補完）」もお付けします！</h3>
				<p><code>new MultiProgressManager</code>するときの第二引数を<code>true</code>にするだけで、スムージングします。<br />
						いちいちView側で操作する必要がありません。</p>
				<pre>//引数は EnterFrameの監視にStage
//スムージングをtrue
//スムージングのfrictionを0.3
//パーセントがいっきに上がりすぎないための、最大の上昇幅
new MultiProgressManager(stage, true, 0.3, 0.05)</pre>
				</p></div>
				</div>
				<div class="section">
				<h2>未対応なところもあるけれど、今後もっと成長する余地があるってことだネ！</h2>
				<ul>
				<li>エンターフレームで監視しているときに、常に<code>ProgressPercentEvent.PERCENT_PROGRESS</code>を飛ばしている（以前のフレームと比較して、パーセントに変化がなければ飛ばさなくてもいいかも）</li>
				<li>IOエラーなどは監視していない（これは監視しなくてもいい？ロードしてる本体が処理すべき？）</li>
				<li>キャンセルがちょっと雑？</li>
				</ul>
				</div>
				<div class="section">
				<h2>というわけで、みなさんの風水パワーを待ってます！</h2>
				<p>無人島でもくもくとやってきたので、ライブラリとはどういう流儀で、どのようなものが求められるのかあまりわかっていません。とにかくコミットしてみました。</p>
				<p>「ここおかしい！」というところがございましたら、ガンガンつっこんでください！</p>
				</div>
				<div class="section" id="multiProgressSample">
				<h2>サンプルの中身を普通に説明</h2>
				<p>サンプルも作りました。<a href="http://www.libspark.org/svn/as3/MultiProgressManager/trunk/sample">Sparkのリポジトリ</a>に入っています。</p>
				<p>サンプルでは普通のFlashでありがちな流れをやっています。</p>
				<ol>
				<li>preloader.swf起動</li>
				<li>main.swf読み込み</li>
				<li>設定xml読み込み</li>
				<li>複数画像の読み込み</li>
				<li>パーセント表示の終了処理</li>
				<li>main.swfの表示開始</li>
				</ol>
				<div class="section">
				<h3>1.preloader.swf起動（Preloader.as)</h3>
				</p></div>
				<div class="section">
				<h3>2.preloaderがmain.swf読み込み（Preloader.as)</h3>
				<p>reloader.as 66行目付近から</p>
				<ol>
				<li>インスタンスの生成（シングルトンバージョンを使用します）
				<pre>SiMultiProgressManager.getInstance(stage, true, 0.3, 0.05);</pre>
</li>
<li>イベントハンドラの設定</li>
<li>読み込み開始</li>
</ol></div>
<div class="section">
<h3>3.main.swfを読み終えたら、設定xmlの読み込み</h3>
<ol>
<li>Preloader.as 95行目付近 mainLoadCompleteHandler内部で</li>
<li>Main.as の86行目 start()を呼び、Mainの構築用のスレッドを開始します</li>
<li>LoadConfigThread.as内部でxmlを読み込みます。</li>
</ol></div>
<div class="section">
<h3>4.設定xmlに指定された複数画像の読み込み</h3>
<p>AssetsLoadThread.as内部で複数画像の読み込みを行います。<br />
			ここではBulkLoaderを使って複数読み込みをまとめています。</p>
</p></div>
<div class="section">
<h3>5.読み込んだ素材を配置していきます</h3>
<p>複数読み込みが終われば BuilderThread.asで配置します。</p>
</p></div>
<div class="section">
<h3>6.パーセント表示の終了処理</h3>
<ol>
<li>すべての読み込みが終了し、パーセントが100%になったら、パーセント表示をフェードアウトさせて消します。</li>
<li>Main側ではOpenContentsThread.asでパーセント表示が消えるまで待機状態になります。</li>
<li>Preloader.as の116行目付近 completeHandler()が呼ばれるので、そこでパーセント表示をフェードさせます。</li>
</ol></div>
<div class="section">
<h3>7.main.swfの表示開始</h3>
<p>パーセント表示のフェードアウトが終わったら、待機していたOpenContentsThreadが動きだし、mainの表示を行います。</p>
</p></div>
</div>
<div class="section">
<h2>ハイ！ということでね！</h2>
<p>そないたいしたクラスでもない上に、書き方の幅ちょっとを広げようとして、また失敗してしまいました。「イライラするわ！」のくだり以降、途中で飽きてきてるのもわかりますね。</p>
<p>はい。今回の記事は<a href="http://katapad.com/wp/tag/screensaver/">スクリーンセーバーの記事</a>で使う予定のライブラリの説明でもありました。複数ロードを使うので、ここらで説明する必要があったのでした。</p>
<p>あと、Threadライブラリにも影響を受けてます。ほんとはThreadのIProgressも対応したかったのだけど、まだまだ理解不足なので次のバージョンで対応とかしたいです。</p>
<p>あーあ、なんつーか、輝いてへんわ。ガイアのやつ、ぜんぜん囁いてくれへんから輝きもせえへんわ。全部ガイアのせいや。ガイア君、どこいってもうたんや。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2009/08/25/multiprogressmanager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SWFObjectのDynamic Publishingを使うとIEとかでStage.stageWidthとheightが一瞬ゼロになるという都市伝説は実在した！</title>
		<link>http://katapad.com/wp/2009/05/19/stage_size_zero_issue_with_swfobject_on_ie/</link>
		<comments>http://katapad.com/wp/2009/05/19/stage_size_zero_issue_with_swfobject_on_ie/#comments</comments>
		<pubDate>Mon, 18 May 2009 17:42:50 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=238</guid>
		<description><![CDATA[IEとかでstage基準の中央寄せができなくなることがある 特定の状況で一定時間、swfの「stageのwidthとheightがゼロ」になり、stageの中心にモノを置いたはずなのに、変な位置にきてしまうことがあります。今回はその問題を肩パッド探検隊が追います。 基本的な対処法は以下のblogにおまかせ！ 崖っぷちWEBデザイナーブログ &#124; stage幅取得のタイミングをテストしてみた 二番煎じですが、ちょこっと書いていきます。対処するクラスが見たい方はページ内リンクで！ SWFObject1.5、SWFObject2.1のDynamic PublishingでWinIEがダメで、MacのFirefoxも怪しいらしい。あとMacのFla:verで作ったスクリーンセーバーもダメ SWFObjectのDynamic Publishingの場合 SWFObjectで空divを起点に動的にObjectタグを埋め込むやつをすると IE全般 MacのFireFox で、一瞬だけstage.stageWidthとstage.stageHeightが0になります。 Dynamic Publishingってのは以下のjsコードで空divに埋め込むやつです //SWFObject1.5 var so = new SWFObject("hoge.swf", "topFlash", "100%", "100%", "8", "#FFFFFF"); so.write("flashcontent"); //SWFObject2.xならDynamic Publishingと呼ばれるタイプ swfobject.embedSWF("hoge.swf", "flashcontent", "100%", "100%", "9.0.45", "expressInstall.swf", flashvars, params, attributes); widthとheightがゼロになるサンプル サンプルでテストしてみてください。 サンプルのasはこちら wmodeはtransparent 最初にstageの中心に文字を書こうとしますが、ダメブラウザだと文字が(0,0)にきます swfの中心に「うんこ」と書かれたらOKブラウザ！ 崩れてたらStageの初期サイズが0のダメブラウザ。IEかMacのFirefoxです traceされているテキストは以下です 一発目にStageのwidthとheightをチェック ENTER_FRAMEイベントと何回ENTER_FRAMEが回ったか ENTER_FRAMEでStageのwidthとheightをチェック stageのResizeイベント stageWidthがゼロだったらADDED_TO_STAGEイベントを取得 それぞれのgetTimer サンプルの結果 [...]]]></description>
			<content:encoded><![CDATA[				<div class="section">
				<h2>IEとかでstage基準の中央寄せができなくなることがある</h2>
				<p>特定の状況で一定時間、swfの「stageのwidthとheightがゼロ」になり、stageの中心にモノを置いたはずなのに、変な位置にきてしまうことがあります。今回はその問題を肩パッド探検隊が追います。</p>
				<p>基本的な対処法は以下のblogにおまかせ！</p>
				<p><a href="http://www.y-tti.com/blog/2009/02/stage.php">崖っぷちWEBデザイナーブログ | stage幅取得のタイミングをテストしてみた</a></p>
				<p>二番煎じですが、ちょこっと書いていきます。対処するクラスが見たい方は<a href="#classStageSizeChecker">ページ内リンクで！</a></p>
				</p></div>
				<div class="section">
				<h2>SWFObject1.5、SWFObject2.1のDynamic PublishingでWinIEがダメで、MacのFirefoxも怪しいらしい。あとMacのFla:verで作ったスクリーンセーバーもダメ</h2>
				<div class="section">
				<h3>SWFObjectのDynamic Publishingの場合</h3>
				<p>SWFObjectで空divを起点に動的にObjectタグを埋め込むやつをすると</p>
				<ul>
				<li>IE全般</li>
				<li>MacのFireFox</li>
				</ul>
				<p>で、一瞬だけstage.stageWidthとstage.stageHeightが0になります。</p>
				<p>Dynamic Publishingってのは以下のjsコードで空divに埋め込むやつです</p>
				<pre>
//SWFObject1.5
var so = new SWFObject("hoge.swf", "topFlash", "100%", "100%", "8", "#FFFFFF");
so.write("flashcontent");

//SWFObject2.xならDynamic Publishingと呼ばれるタイプ
swfobject.embedSWF("hoge.swf", "flashcontent", "100%", "100%", "9.0.45", "expressInstall.swf", flashvars, params, attributes);
			</pre>
				<div class="section">
				<h4>widthとheightがゼロになるサンプル</h4>
				</p></div>
				<p><a href="http://katapad.com/wp/upload_img/2009/05/stagesize/issue_sample/">サンプル</a>でテストしてみてください。<br />
				<a href="http://katapad.com/wp/upload_img/2009/05/stagesize/issue_sample/StageSizeCheck.as">サンプルのasはこちら</a></p>
				<ul>
				<li>wmodeはtransparent</li>
				<li>最初にstageの中心に文字を書こうとしますが、ダメブラウザだと文字が(0,0)にきます</li>
				<li>swfの中心に「うんこ」と書かれたらOKブラウザ！</li>
				<li><strong>崩れてたらStageの初期サイズが0のダメブラウザ。IEかMacのFirefoxです</strong></li>
				<li>traceされているテキストは以下です
				<ul>
				<li>一発目にStageのwidthとheightをチェック</li>
				<li>ENTER_FRAMEイベントと何回ENTER_FRAMEが回ったか</li>
				<li>ENTER_FRAMEでStageのwidthとheightをチェック</li>
				<li>stageのResizeイベント</li>
				<li>stageWidthがゼロだったらADDED_TO_STAGEイベントを取得</li>
				<li>それぞれのgetTimer</li>
				</ul>
				</li>
				</ul></div>
				<div class="section">
				<h4>サンプルの結果</h4>
				<dl>
				<dt>win</dt>
				<dd>
				<table class="generalThead">
				<thead>
				<tr>
				<th scope="col">IE6～8</th>
				<th scope="col">Firefox3</th>
				<th scope="col">Opera9.6</th>
				<th scope="col">Safari3</th>
				<th scope="col">Safari4</th>
				<th scope="col">chrome</th>
				</tr>
				</thead>
				<tbody>
				<tr>
				<td>×</td>
				<td>○</td>
				<td>○</td>
				<td>○</td>
				<td>○</td>
				<td>○</td>
				</tr>
				</tbody>
				</table>
				</dd>
				<dd>キャプチャ<br /><a href="http://katapad.com/wp/upload_img/2009/05/win_capture.png"><img src="http://katapad.com/wp/upload_img/2009/05/win_capture-177x300.png" alt="win_capture" title="win_capture" width="177" height="300" class="alignnone size-medium wp-image-241" /></a></dd>
				</dl>
				<dl>
				<dt>mac os10.5 </dt>
				<dd>
				<table class="generalThead">
				<thead>
				<tr>
				<th scope="col">Firefox3</th>
				<th scope="col">Opera9.6</th>
				<th scope="col">Safari3</th>
				<th scope="col">Safari4</th>
				</tr>
				</thead>
				<tbody>
				<tr>
				<td>△</td>
				<td>○</td>
				<td>○</td>
				<td>○</td>
				</tr>
				</tbody>
				</table>
				</dd>
				<dd>（崖っぷちさんとこではMacのFirefoxでもアウトでしたが私の環境ではOKでした）</dd>
				</dl></div>
				<div class="section">
				<h4>ENTER_FRAMEの方がRESIZEイベントよりも速くStageのwidthが変わったことを知る</h4>
				<p>このサンプルを作っていてわかったのですが、ENTER_FRAMEでwidthとheightを監視して、<strong>ゼロじゃなくなったあと（ENTER_FRAMEのイベントハンドリングが終わったあと）にRESIZEイベントが飛んできます</strong>。なので、無意味なタイムラグが生じます。</p>
				</p></div>
				<div class="section">
				<h4>SWFObjectでの原因</h4>
				<p>SWFObjectの原因は<a href="http://katapad.com/wp/2007/05/21/take_care_using_swfobject_on_ie/">以前のエントリで妄想を膨らませました</a>が、これは間違っていると思います。詳細ご存知のかた、おしえてください！</p>
				</p></div>
				</p></div>
				<div class="section">
				<h2>fla:verで作ったスクリーンセーバーをMacで再生するとき</h2>
				<p>fla:ver(<a href="http://flaver.jp/">http://flaver.jp/</a>)というスクリーンセーバー作成ソフトで作ったスクリーンセーバーでも起こります。<br />ref) <a href="http://flaver.jp/Contents/faq.html">Mac OS X 10.5で MovieClip が表示されないことがあります </a></p>
				</p></div>
				<div id="classStageSizeChecker" class="section">
				<h2>対処するクラスを作りました</h2>
				<p>大変つまらないクラスですがどうかご査収くださいませ<br />
				<a href="http://katapad.com/wp/upload_img/2009/05/stagesize/sample">stagesize問題を対処したサンプルの実行結果</a></p>
				<div class="section">
				<h3>対処法について</h3>
				<ul>
				<li>Event.RESIZEよりEvent.ENTER_FRAMEの方がstageの幅高の取得が早いので、ENTER_FRAME監視がベター</li>
				<li>dispatchEventしてるのは入口と出口を分けないため。<br />（newする前に<code>if(stage.stageWidth * stage.stageHeight != 0)</code>を挟めばOKブラウザをスルーできますが、OKブラウザとNGブラウザで出口がバラバラになるとややこしいのでこうしました。）</li>
				</ul></div>
				<div class="section">
				<h3>クラスとサンプル</h3>
				<p><a href="http://katapad.com/wp/upload_img/2009/05/stagesize/stageSizeChecker.zip">サンプルとソースzip</a></p>
				<dl>
				<dt>StageSizeChecker.as</dt>
				<dd>
				<pre>
package com.katapad.utils
{
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.utils.getTimer;

	/**
	 * WinIEやMacFFでSWFObjectのDynamic Publishingをしたときにおこる
	 * Stage.stageWidthとstageHeightが0になる問題を
	 * EnterFrameで監視してチェックするクラス&lt;br /&gt;
	 * Event.RESIZEが飛んでくるタイミングがEvent.ENTER_FRAMEより遅いので、
	 * EVENT.COMPLETEのついでにstageからEVENT.RESIZEも飛ばします(オプション)。
	 *
	 * @author katapad.com
	 * @version 0.1
	 * @since 2009/03/17 3:40
	 * @usage
	 * &lt;p&gt;MainクラスやPreloaderクラスの最初に&lt;/p&gt;
	 * &lt;pre&gt;
	 * var StageSizeChecker:StageSizeChecker = new StageSizeChecker(stage);
	 * StageSizeChecker.addEventListener(Event.COMPLETE, delayInit);
	 * StageSizeChecker.start();
	 * &lt;/pre&gt;
	 * &lt;p&gt;を書いて、あとはEvent.COMPLETEの受取先で&lt;/p&gt;
	 * &lt;pre&gt;event.target.removeEventListener(Event.COMPLETE, delayInit);&lt;/pre&gt;
	 * &lt;p&gt;すればOK&lt;/p&gt;

	 */
	public class StageSizeChecker extends EventDispatcher
	{
		/**
		 * stage.stageWidthとstage.stageHeightが0以外になったら配信します。
		 * @eventType flash.events.Event.COMPLETE
		 */
		[Event(name = &quot;complete&quot;, type = &quot;flash.events.Event&quot;)]

		//----------------------------------
		//  static var/const
		//----------------------------------

		//----------------------------------
		//  instance var
		//----------------------------------
		private var _stage:Stage;
		private var _isResizeEvent:Boolean;

		/**
		 * ステージサイズを見張り、ゼロ以外ならEvent.COMPLETEを配信します。
		 * @param	stage
		 * @param	isResizeEvent	_stage.dispatchEvent(new Event(Event.RESIZE))も同時に発動させるかどうか
		 */
		public function StageSizeChecker(stage:Stage, isResizeEvent:Boolean = true)
		{
			init(stage, isResizeEvent);
		}

		private function init(stage:Stage, isResizeEvent):void
		{
			_stage = stage;
			_isResizeEvent = isResizeEvent;
		}

		//--------------------------------------------------------------------------
		//
		//  PUBLIC
		//
		//--------------------------------------------------------------------------
		public function start():void
		{
			if (isValidSize())
			{
				complete();
				return;
			}
			_stage.addEventListener(Event.ENTER_FRAME, check);
		}
		//--------------------------------------------------------------------------
		//
		//  PROTECTED
		//
		//--------------------------------------------------------------------------

		//--------------------------------------------------------------------------
		//
		//  EVENT HANDLER
		//
		//--------------------------------------------------------------------------
		private function check(event:Event):void
		{
			if (isValidSize())
				complete();
		}

		//--------------------------------------------------------------------------
		//
		//  PRIVATE
		//
		//--------------------------------------------------------------------------
		private function isValidSize():Boolean
		{
			//trace( getTimer(), &quot;_stage.stageWidth : &quot; + _stage.stageWidth );
			return _stage.stageWidth * _stage.stageHeight != 0;
		}

		private function complete():void
		{
			_stage.removeEventListener(Event.ENTER_FRAME, check);
			if (_isResizeEvent)
				_stage.dispatchEvent(new Event(Event.RESIZE));
			dispatchEvent(new Event(Event.COMPLETE));
			_stage = null;
		}

		//--------------------------------------------------------------------------
		//
		//  GETTER/SETTER
		//
		//--------------------------------------------------------------------------

	}

}
</pre>
				</dd>
				</dl></div>
				</p></div>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2009/05/19/stage_size_zero_issue_with_swfobject_on_ie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>超便利なローダーBulkLoaderの落とし穴にハマってきました</title>
		<link>http://katapad.com/wp/2009/04/17/nice_loade/</link>
		<comments>http://katapad.com/wp/2009/04/17/nice_loade/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 16:10:37 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=191</guid>
		<description><![CDATA[便利なAS3用ローダー：BulkLoaderの解説は他のサイトにおまかせ！ BulkLoaderは複数の素材をまとめて読み込める万能ローダーです。解説はほかのサイトにおまかせ！ぜひ読んでください。読んだら僕のサイトに帰ってこなくても大丈夫です！ ActionScript3.0]BulkLoaderのドキュメント &#8211; l4l BulkLoaderを触ってみたよ。 &#8211; Humming Via Kitchen BulkLoaderの便利ポイントをまとめると まとめてロードできる String形式のurlをadd()するだけでロードの準備はOK。さらにvideoなのかxmlなのかjpgなのかなどを自動判別してロードしてくれる（きちんとtype指定もできるのでやったほうがいいです） ロードが終わったら、あらかじめBulkLoaderに渡しておいたIDやurlのstringで取得できる getXML()とかgetBitmapdata()などで好みのインスタンスで取得できる 複数ロードのパーセントや何個中何個がロードできたかを取得できる。 ロードしたものを取得後、メモリに残したり、取得したらメモリから消したりと、メモリ管理が簡単 といったところです。ものすごく便利です。 今回ハマったローディングパーセント処理 今回、外部素材を10個ほど読み込んでいました。しかし、パーセント表示がおかしな挙動になってしまいました。 最初の1秒間くらいでパーセントが100%近くに達し その後の1秒で10%ちかくまで減り、 その後は正常に100%まで達しました。 原因は2つあって、 ロードするときにproressイベントが発動するまで、bytesTotalが見えない問題 BulkLoaderのパーセント表示には2つ種類があり、そのうち強引な作りのほうを選んでしまった 1.ロードするときにproressイベントが発動するまで、bytesTotalが見えない問題 外部素材との接続を確立してproressイベントが発動するまではbytesTotalが見えません。下のスクリプトで確認してみましょう。 ProgressEvent発生後、bytesLoadが取得できる &#8211; wonderfl build flash online このように、progressEventが発生するまでbytesLoadedやbytesTotalはわかりません。複数ロード時にはこのへんの問題があります。 BulkLoaderのパーセント表示には2つ種類があり、そのうち強引な作りのほうを選んでしまった 次にBulkLoaderが持っている2種類のパーセント表示を見てみましょう。 読み込みが完了したアイテム数 / トータルのアイテム数（BulkProgressEvent.ratioLoaded) 今までに読み込んだアイテムの総bytesLoaded / トータルのアイテムの総bytesTotal（BulkProgressEvent.percentLoaded） 「1.完了数/総数」は複数ロードするときによく使われる手法ですが、2つしかロードがないときは50%ずつ増えることになるので、使いどころが難しいときもあります。 正確なパーセントを知りたいときは後者の「bytesLoadedとbytsTotalの比率」を使います。 しかし、ここが大きな落とし穴となっていました。 BulkLoaderはこのパーセント表示を強引な手法で実装しています。前述のとおり、flash.event.ProgressEventが飛んでこない限り、bytesTotalを知る術はありません。BulkLoaderでは、 bytesTotalを取得できたitemだけを加算し、 すべてのitemのbytesLoadedと上記のbytesTotalの比率からパーセントを表示します つまり、すべてのitemのbytesTotalがわかるのは最後のitemのprogressが始まったときになのに、分母（bytesTotal）が変動する状態でパーセント表示を開始してしまうのです。 ロード直後では800/1000（80%）だったものが、その次のフレームで1000/10000（10％）となる可能性があるのです。 じゃあどうする？ 2009-10-06追記 ： weightPercentを使う [...]]]></description>
			<content:encoded><![CDATA[				<div class="section">
				<h2>便利なAS3用ローダー：BulkLoaderの解説は他のサイトにおまかせ！</h2>
				<p>BulkLoaderは複数の素材をまとめて読み込める万能ローダーです。解説はほかのサイトにおまかせ！ぜひ読んでください。読んだら僕のサイトに帰ってこなくても大丈夫です！</p>
				<ul>
				<li><a href="http://kozy.heteml.jp/l4l/2008/03/actionscript30bulkloader-1.html">ActionScript3.0]BulkLoaderのドキュメント &#8211; l4l</a></li>
				<li><a href="http://humming.via-kitchen.com/2008/03/06/tried-using-bulkloader-on-actionscript3/">BulkLoaderを触ってみたよ。 &#8211; Humming Via Kitchen</a></li>
				</ul>
				<div class="section">
				<h3>BulkLoaderの便利ポイントをまとめると</h3>
				<ul>
				<li>まとめてロードできる</li>
				<li>String形式のurlをadd()するだけでロードの準備はOK。さらにvideoなのかxmlなのかjpgなのかなどを自動判別してロードしてくれる（きちんとtype指定もできるのでやったほうがいいです）</li>
				<li>ロードが終わったら、あらかじめBulkLoaderに渡しておいたIDやurlのstringで取得できる</li>
				<li>getXML()とかgetBitmapdata()などで好みのインスタンスで取得できる</li>
				<li>複数ロードのパーセントや何個中何個がロードできたかを取得できる。</li>
				<li>ロードしたものを取得後、メモリに残したり、取得したらメモリから消したりと、メモリ管理が簡単</li>
				</ul>
				<p>といったところです。ものすごく便利です。</p>
				</p></div>
				</div>
				<div class="section">
				<h2>今回ハマったローディングパーセント処理</h2>
				<p>今回、外部素材を10個ほど読み込んでいました。しかし、パーセント表示がおかしな挙動になってしまいました。</p>
				<ol>
				<li>最初の1秒間くらいでパーセントが100%近くに達し</li>
				<li>その後の1秒で10%ちかくまで減り、</li>
				<li>その後は正常に100%まで達しました。</li>
				</ol>
				<p>原因は2つあって、</p>
				<ol>
				<li>ロードするときにproressイベントが発動するまで、bytesTotalが見えない問題</li>
				<li>BulkLoaderのパーセント表示には2つ種類があり、そのうち強引な作りのほうを選んでしまった</li>
				</ol>
				<div class="section">
				<h3>1.ロードするときにproressイベントが発動するまで、bytesTotalが見えない問題</h3>
				<p>外部素材との接続を確立して<strong>proressイベントが発動するまではbytesTotal</strong>が見えません。下のスクリプトで確認してみましょう。</p>
				<div style="text-align:center;width:465px;"><iframe title="ProgressEvent発生後、bytesLoadが取得できる - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/c84995a53248da9d63cce89cdd637d592ae42f17" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.kayac.com/code/c84995a53248da9d63cce89cdd637d592ae42f17" title="ProgressEvent発生後、bytesLoadが取得できる - wonderfl build flash online">ProgressEvent発生後、bytesLoadが取得できる &#8211; wonderfl build flash online</a></div>
				<p>このように、progressEventが発生するまでbytesLoadedやbytesTotalはわかりません。複数ロード時にはこのへんの問題があります。</p>
				<p><img src="http://katapad.com/wp/upload_img/2009/04/progressevent_fig1.png" alt="" width="442" height="171" /></p>
				</div>
				<div class="section">
				<h3>BulkLoaderのパーセント表示には2つ種類があり、そのうち強引な作りのほうを選んでしまった</h3>
				<p>次にBulkLoaderが持っている2種類のパーセント表示を見てみましょう。</p>
				<ol>
				<li>読み込みが完了したアイテム数 / トータルのアイテム数（<code>BulkProgressEvent.ratioLoaded</code>)</li>
				<li>今までに読み込んだアイテムの総bytesLoaded / トータルのアイテムの総bytesTotal（<code>BulkProgressEvent.percentLoaded</code>）</li>
				</ol>
				<p> 「1.完了数/総数」は複数ロードするときによく使われる手法ですが、2つしかロードがないときは50%ずつ増えることになるので、使いどころが難しいときもあります。<br />
				正確なパーセントを知りたいときは後者の「bytesLoadedとbytsTotalの比率」を使います。</p>
				<p>しかし、ここが大きな落とし穴となっていました。</p>
				<p>BulkLoaderはこのパーセント表示を強引な手法で実装しています。前述のとおり、flash.event.ProgressEventが飛んでこない限り、bytesTotalを知る術はありません。BulkLoaderでは、</p>
				<ol>
				<li>bytesTotalを取得できたitemだけを加算し、</li>
				<li>すべてのitemのbytesLoadedと上記のbytesTotalの比率からパーセントを表示します</li>
				</ol>
				<p>つまり、<strong>すべてのitemのbytesTotalがわかるのは最後のitemのprogressが始まったときになのに、分母（bytesTotal）が変動する状態でパーセント表示を開始してしまう</strong>のです。</p>
				<p>ロード直後では<br />800/1000（80%）<br />だったものが、その次のフレームで<br />1000/10000（10％）<br />となる可能性があるのです。</p>
				</div>
				</div>
				<div class="section">
				<h2>じゃあどうする？</h2>
				<div class="section">
				<h3>2009-10-06追記 ： <code>weightPercent</code>を使う</h3>
				<p>以下のやりかたよりもスマートな解法がありました。<code>BulkProgressEvent.weightPercent</code>を使うともっとまともなパーセントを取得できます。<br />こちらの記事に書きました。「<a href="http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/">BulkLoaderで「もう悩まない！」ための6つのtipsをまずは14日間で売上No.1！！</a>」</p>
				</p></div>
				<div class="section">
				<h3><del>1.読み込みが完了したアイテム数 / トータルのアイテム数をとる</del></h3>
				<p>これが一番安全ですね。パーセント表示は正確なものが期待できませんし、トータルのアイテム数が2つ3つのときはおおざっぱになるので、ごまかしの効くviewにしましょう</p>
				</p></div>
				<div class="section">
				<h3><del>2.読み込み順序に優先順位をつけ、重たいものから先に読み込む</del></h3>
				<p>先に軽いファイルを大量に読み込むと、重たいファイルを読み込み始めた瞬間にグッと分母が上昇してしまいます。重たいファイルから読めば分母の変動が少ないので、ある程度ゴマカシが効くようになります。</p>
				<pre>
//優先順位はこんな感じで設定
//addの引数でpriorityを設定。priorityが高いやつが優先的に読み込まれる。重たいファイルを優先的に指定しとく。
var bulkLoader:BulkLoader = new BulkLoader(&quot;main loading&quot;);
bulkLoader.add(&quot;めっさ重たい.flv&quot;, { priority : 1000 });
bulkLoader.add(&quot;コニシキ.flv&quot;, { priority : 1000 });
bulkLoader.add(&quot;ダイエットコーラ.xml&quot;, { priority : 0 });
bulkLoader.add(&quot;糖分ゼロ.xml&quot;, { priority : 0 });
bulkLoader.add(&quot;ふわっふわ.xml&quot;, { priority : 0 });
bulkLoader.add(&quot;納品前日に仕様変更.swf&quot;, { priority : 500000 });
bulkLoader.addEventListener(～～～);
bulkLoader.start();
</pre>
				<p><a href="http://www.stimuli.com.br:8080/media/projects/bulk-loader/docs/br/com/stimuli/loading/BulkLoader.html#add()">addメソッドの引数はasdocで</a></p>
				</p></div>
				<p>重たいファイルは後回しにした方がいいときの方が多いので、そのへんはトレードオフとかを考えてベターな手法を選びましょう。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2009/04/17/nice_loade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TextFieldから文字列が溢れたときに「…」ってするやつのasを少し高速化</title>
		<link>http://katapad.com/wp/2009/01/06/tune_textfield_trimming/</link>
		<comments>http://katapad.com/wp/2009/01/06/tune_textfield_trimming/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 16:11:47 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=166</guid>
		<description><![CDATA[TextFieldから文字列がはみ出した時の処理 &#8211; blog.nium.jpを読んでいて、高速化できそうだと思ったのでほんの少しいじくりました。 ソースだけ必要な人もいると思うのでいきなりソース！適当なクラスのstaticにでも置いてください。 public static function trimmingText(textField:TextField, endText:String = "...", defaultFontSize:Number = 12):void { textField.wordWrap = false; if (textField.maxScrollH defaultFontSize * 1.5); textField.text = text.slice(0, text.length - endText.length - 1 - Math.ceil(textField.maxScrollH / defaultFontSize)) + endText; while (textField.maxScrollH > 0) { text = textField.text; textField.text = text.slice(0, text.length - endText.length - 1) + endText; [...]]]></description>
			<content:encoded><![CDATA[				<p><a href="http://blog.nium.jp/2007/04/textfield.php">TextFieldから文字列がはみ出した時の処理 &#8211; blog.nium.jp</a>を読んでいて、高速化できそうだと思ったのでほんの少しいじくりました。</p>
				<p>ソースだけ必要な人もいると思うのでいきなりソース！適当なクラスのstaticにでも置いてください。</p>
				<pre>
public static function trimmingText(textField:TextField, endText:String = "...", defaultFontSize:Number = 12):void
{
	textField.wordWrap = false;
	if (textField.maxScrollH <= 0)
		return;
	textField.appendText(endText);
	var text:String = textField.text;

	//ループの回数を減らす
	if (textField.maxScrollH > defaultFontSize * 1.5);
		textField.text = text.slice(0, text.length - endText.length - 1 - Math.ceil(textField.maxScrollH / defaultFontSize)) + endText;
	while (textField.maxScrollH > 0)
	{
		text = textField.text;
		textField.text = text.slice(0, text.length - endText.length - 1) + endText;
	}
}
</pre>
				<pre>
//こうやって使う
var unko_txt:TextField = addChild(new TextField()) as TextField;
unko_txt.width = 100;
unko_txt.autoSize = TextFieldAutoSize.LEFT;
unko_txt.text = "君、ウンコくさいね。すごく臭うからしたよね？ね？ね？君が好き。"
Hogehoge.trimmingText(unko_txt);
</pre>
				<h2>本家でのソースの流れ</h2>
				<p>本題に入る前に、本家ではどういう処理をしてるかを少し説明します。</p>
				<ol>
				<li>水平スクロールがあれば</li>
				<li>テキストフィールドの最後に&#8221;…&#8221;をつける</li>
				<li>水平スクロールがなくなるまで↓をループする</li>
				<li>1文字ずつ削除していく</li>
				</ol>
				<h2>以下高速化をした点</h2>
				<h3>テキストをトリミングする方法を配列じゃなくて、Stringをいじくる方法に変えた</h3>
				<p>配列はnewして、中身を入れるときがずいぶん重いらしいので、普通のStringをいじくる方法にしてみた。<strong>5～10%高速化。</strong></p>
				<pre>//配列を作ってspliceして、joinするという、配列生成+操作が重そうだったので
//var words:Array = textField.text.split( "" );
//words.splice( words.length - 4, 1);
//textField.text = words.join( "" );
 textField.text = text.slice(0, text.length - endText.length - 1) + endText;
</pre>
				<h3>whileループの回数を減らすために、if分をひとつ挟んで、がっつり削除する</h3>
				<p>1文字ずつ削除するのがもったいない気がするので、ある程度がっつり削除する方向にしてみた。文字数にもよるけれど、<strong>80%高速化</strong></p>
				<pre>
 if (textField.maxScrollH > defaultFontSize * 1.5);
 	textField.text = text.slice(0, text.length - endText.length - 1 - Math.ceil(textField.maxScrollH / defaultFontSize)) + endText;
</pre>
				<p>whileループ前に一枚かませます。あふれた文字数をフォントサイズから割り出してがっつり削除します。半角文字などが大量にあると一発では消えませんが、それでもかなりの量の文字を一気に消せます。</p>
				<p>図にするとこんな感じです。<br /><img src="/wp/upload_img/2009/01/fig.png"</p>
				<p>（textField.getTextFormat().sizeからフォントサイズを取得できますが、ここでいちいち取得してると重くなるので引数にしています）</p>
				<h2>結果 45ms → 5ms</h2>
				<p>計測方法は</p>
				<ul>
				<li>以下の文章が入ったTextFieldを5つ用意してまわしました。
				<pre>□□□□■□□□□1□□□□■□□□□2□□□□■□□□□3□□□□■□□□□4□□□□■□□□□5□□□□■□□□□6□□□□■□□□□7□□□□■□□□□8□□□□■□□□□9□□□□■□□□□10</pre>
</li>
<li>TextFieldのwidthは200にしました。</li>
</ul>
<p>for文で10万回まわしたとかじゃないですよ。日常的に使う場面っぽくしてみました。</p>
<p>ちっさいところとは言えど、ループ回数が多いのと、描画に関わるところなので若干の高速化ができました。</p>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2009/01/06/tune_textfield_trimming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>デザイナー上がりのFlasher1年生が読んだ19冊の本を、これほどかというほどに感想を書きます。だいたい3行だけど。</title>
		<link>http://katapad.com/wp/2008/12/31/19_books_a_flashman_read/</link>
		<comments>http://katapad.com/wp/2008/12/31/19_books_a_flashman_read/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 07:38:17 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[雑感]]></category>
		<category><![CDATA[book]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=129</guid>
		<description><![CDATA[div.textBody p.amazonImg { float: left; margin-left: 15px; margin-bottom: 15px; } div.textBody h2, div.textBody h3 { clear: both; } Flasherになって1年が経ちました。この1年いろいろと勉強さしてもらいました。 大掃除で本の片付けついでに、今年買ったFlash技術周辺本のレビューでもしましょう。 途中までしか読んでない本が大半ですが、まったく読まなかった本もあります。 ここでは最低でも50ページは読んだ本19冊を選抜しました。Flash本9冊、それ以外10冊です。 ずらずらと並べた19冊の感想を読むのはつらいと思うので、1冊だけ「ムツゴロウさんの動物王国のナレーション」のモノマネをしながら書いています。 2008-01月～03月に読んだ本 01.ActionScript 3.0 アニメーション ★★★★★。オススメ。3か月で全ページ読破しようと思ってた。 結局、最後の100ページは流し読みをしたけれど、初心者にはかなりいい内容。とりあえず大量のモノを動かして、ある程度の高速化を意識して…という基本がわかればええと思う。 02.UMLモデリングレッスン-21の基本パターンでわかる要求モデルの作り方 ★★★☆☆。例がFlashと無縁なので忍耐が必要。 UMLでも勉強しようと思って買った。この手の本に共通して言えるのが、例がよくわからんのだ。会員が何かを購買した情報を分類したり、従業員の種類を気にしたり、顧客の種類を気にしたり、といった「Flashではない向こう側のプログラミング」の例だらけだ。このような例に耐えられる、もしくはそんなん気にせず本質を読み取れるならいい本じゃないかと思う。UML、つまりオブジェクト指向の表現の幅が広がるはず。 03.リファクタリング―プログラムの体質改善テクニック ★★★★★。オススメ。ビューティフルなコードを書くための本。 第3章まで読めとamazonに書いてあったけど、そこまで読めたら全部読める。コードの不吉な匂いがわかればよし。優秀な人のソースも読めるようになる。 ただ、このままFlashに適応させると大変な目にあうので注意！律儀に書くとコードの実行が遅くなるので、この辺のバランス感覚は経験が必要になってくる。 04.モーション・タイポグラフィ ★★★☆☆。古い。中古で買ったら間の4ページくらいが破られてた。 モーション・タイポグラフィの歴史とか見方とかその辺を意識できるようになった気がする。とりあえず、映画のオープニングはしっかり見ようと思った。 05.ActionScript3.0 ビジュアル・リファレンス 辞書は1冊あればいいだろう。Flashのヘルプで事足りるので不要かもしれない。1か月に1度開くと知らん機能を発見できたりする。 06.Advanced ActionScript 3 with Design Patterns ★☆☆☆☆。Flashでのデザインパターンはどのようにして行われるのか、そういった疑問を持ち、英語の本に手をだした。 しかし、単に他言語の教育用デザインパターンをActionScriptで書きました的内容なのがとても気になってしまった。AbstractGameのサブクラスにFootBallGameやで。どこで使うねん。Flashのために書かれたとは思えない内容で残念。 2008-04～06月に読んだ本 07.Webデザインの「プロだから考えること」 ★★★☆☆。一流の人たちの作り方がほんの少しわかる 個人的には電通の中村洋基氏とimaginativeの水藤祐之氏・深澤 洋介氏の話が印象に残ってる。みんなクオリティを高めるために死に物狂いなんやなー。そらぁ、僕みたいな底辺が太刀打ちできるはずもない。そういうことを実感できただけでもありがたや。 [...]]]></description>
			<content:encoded><![CDATA[				<style type="text/css">
				div.textBody p.amazonImg {
					float: left;
					margin-left: 15px;
					margin-bottom: 15px;
				}
				div.textBody h2, 
				div.textBody h3 {
					clear: both;
				}
				</style>
				<p>Flasherになって1年が経ちました。この1年いろいろと勉強さしてもらいました。</p>
				<p>大掃除で本の片付けついでに、今年買ったFlash技術周辺本のレビューでもしましょう。</p>
				<p>途中までしか読んでない本が大半ですが、まったく読まなかった本もあります。<br />
				ここでは<em>最低でも50ページは読んだ本19冊を選抜しました。Flash本9冊、それ以外10冊です。</em></p>
				<p>ずらずらと並べた19冊の感想を読むのはつらいと思うので、<em>1冊だけ「ムツゴロウさんの動物王国のナレーション」のモノマネをしながら書いています。</em></p>
				<h2>2008-01月～03月に読んだ本</h2>
				<h3>01.ActionScript 3.0 アニメーション</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4862460496?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4862460496&amp;adid=0QQRAT2PR06CZXM9N8QE&amp;"><img src="http://rcm-images.amazon.com/images/I/51VBoM8avZL._SL100_.jpg"/></a></p>
				<p><strong>★★★★★。オススメ。</strong>3か月で全ページ読破しようと思ってた。</p>
				<p>結局、最後の100ページは流し読みをしたけれど、初心者にはかなりいい内容。とりあえず大量のモノを動かして、ある程度の高速化を意識して…という基本がわかればええと思う。</p>
				<h3>02.UMLモデリングレッスン-21の基本パターンでわかる要求モデルの作り方</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4822283496?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4822283496&amp;adid=0VC9SZ4RWXTWQMY3TXQA&amp;"><img src="http://rcm-images.amazon.com/images/I/41vBP99HY8L._SL100_.jpg"/></a></p>
				<p>★★★☆☆。例がFlashと無縁なので忍耐が必要。</p>
				<p>UMLでも勉強しようと思って買った。この手の本に共通して言えるのが、例がよくわからんのだ。会員が何かを購買した情報を分類したり、従業員の種類を気にしたり、顧客の種類を気にしたり、といった「Flashではない向こう側のプログラミング」の例だらけだ。このような例に耐えられる、もしくはそんなん気にせず本質を読み取れるならいい本じゃないかと思う。UML、つまりオブジェクト指向の表現の幅が広がるはず。</p>
				<h3>03.リファクタリング―プログラムの体質改善テクニック</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4894712288?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4894712288&amp;adid=1W31BTF7D6ZZ04PKD5NT&amp;"><img src="http://rcm-images.amazon.com/images/I/51885S48YPL._SL100_.jpg"/></a></p>
				<p><strong>★★★★★。オススメ。</strong>ビューティフルなコードを書くための本。</p>
				<p>第3章まで読めとamazonに書いてあったけど、そこまで読めたら全部読める。コードの不吉な匂いがわかればよし。優秀な人のソースも読めるようになる。<br />
				ただ、このままFlashに適応させると大変な目にあうので注意！律儀に書くとコードの実行が遅くなるので、この辺のバランス感覚は経験が必要になってくる。</p>
				<h3>04.モーション・タイポグラフィ</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4766110900?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4766110900&amp;adid=10EHYRPRMQ10B75FYJF3&amp;"><img src="http://rcm-images.amazon.com/images/I/51ZJF5DSX6L._SL100_.jpg"/></a></p>
				<p>★★★☆☆。古い。中古で買ったら間の4ページくらいが破られてた。</p>
				<p>モーション・タイポグラフィの歴史とか見方とかその辺を意識できるようになった気がする。とりあえず、映画のオープニングはしっかり見ようと思った。</p>
				<h3>05.ActionScript3.0 ビジュアル・リファレンス</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4844359703?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4844359703&amp;adid=0X3W4SV5FAREPH2FVFNH&amp;" aiotitle="" aiotarget="true"><img src="http://rcm-images.amazon.com/images/I/51MrJroXCpL._SL100_.jpg"/></a></p>
				<p>辞書は1冊あればいいだろう。Flashのヘルプで事足りるので不要かもしれない。1か月に1度開くと知らん機能を発見できたりする。</p>
				<h3>06.Advanced ActionScript 3 with Design Patterns</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/0321426568?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=0321426568&amp;adid=1M93P3MY9DB5C136JB44&amp;"><img src="http://rcm-images.amazon.com/images/I/51qbu8eCMgL._SL100_.jpg"/></a></p>
				<p>★☆☆☆☆。Flashでのデザインパターンはどのようにして行われるのか、そういった疑問を持ち、英語の本に手をだした。</p>
				<p>しかし、単に他言語の教育用デザインパターンをActionScriptで書きました的内容なのがとても気になってしまった。AbstractGameのサブクラスにFootBallGameやで。どこで使うねん。Flashのために書かれたとは思えない内容で残念。
				</p>
				<h2>2008-04～06月に読んだ本</h2>
				<h3>07.Webデザインの「プロだから考えること」</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4844325396?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4844325396&amp;adid=07D5W3F7Q9GV4JW0TDYQ&amp;"><img src="http://rcm-images.amazon.com/images/I/41aThl-rG2L._SL100_.jpg"/></a></p>
				<p>★★★☆☆。一流の人たちの作り方がほんの少しわかる</p>
				<p> 個人的には電通の中村洋基氏とimaginativeの水藤祐之氏・深澤 洋介氏の話が印象に残ってる。みんなクオリティを高めるために死に物狂いなんやなー。そらぁ、僕みたいな底辺が太刀打ちできるはずもない。そういうことを実感できただけでもありがたや。
				</p>
				<h3>08.FLASH OOP (AS2のやつ) </h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4798106119?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4798106119&amp;adid=16DH3HWDED578BWSSMQB&amp;"><img src="http://rcm-images.amazon.com/images/I/41H0J81N28L._SL100_.jpg"/></a></p>
				<p><strong>★★★★☆。オススメ。</strong>のちにAS3版がでるけど、こっちのがいい。</p>
				<p>なにがいいかというと、Flash以外のことが書いてある。すなわち、Flash以外の本を読め！と書いてあるのと同義だ（と思う）。これを見てプログラミングの世界の広さを垣間見れたし、興味の対象も広がった。
				</p>
				<h3>09.Learning Actionscript 3.0</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/059652787X?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=059652787X&amp;adid=0TY107K4T1XWJNK13WDT&amp;"><img src="http://rcm-images.amazon.com/images/I/51ZNcrGECEL._SL100_.jpg"/></a></p>
				<p>★★★☆☆。のちに和訳が出たのでこいつ（原著）は買う必要がない。和訳はこっち<a href="http://www.amazon.co.jp/gp/product/4873113717?ie=UTF8&#038;tag=kpd-22&#038;linkCode=as2&#038;camp=247&#038;creative=7399&#038;creativeASIN=4873113717">初めてのActionScript 3.0 Flashユーザーのためのステップアップガイド</a><img src="http://www.assoc-amazon.jp/e/ir?t=kpd-22&#038;l=as2&#038;o=9&#038;a=4873113717" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
				<p>内容は実にわかりやすい。わかりやすすぎる。コードもわかりやすいし、サンプルも興味をそそるものが多い。あと、AS3でつまづきやすいところと基礎的なところに絞られていて、無理なく読めた。デザイナ上がりで大重さんの本を読んだら次はこれか。</p>
				<h3>10.Production Studio マスター After Effects</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4862460119?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4862460119&amp;adid=1GKBVZ3JN8D2EGAJAWXX&amp;"><img src="http://rcm-images.amazon.com/images/I/41mhU105UHL._SL100_.jpg"/></a></p>
				<p>★★★☆☆。高い。高いけど、サンプル素材がすごいらしい。</p>
				<p>内容は初心者向け。エフェクトの一覧があるので、やさしい。Flashばかりに頼ってたら死ぬ状況もあるので、AfterEffectsは絶対覚えとかないといけないし、表現の幅も広がる。
				</p>
				<h3>11.Flashデザインラボ -プロに学ぶ、一生枯れない永久不滅テクニック</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4797348526?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4797348526&amp;adid=198YYGSNDR7H48PNAPNF&amp;"><img src="http://rcm-images.amazon.com/images/I/51JTpLq+FaL._SL100_.jpg"/></a></p>
				<p>★★★☆☆。初心者向けだけど、むらけん氏とTeamLabがずば抜けてる。</p>
				<p>むらけん氏とTeamLabの2つはつくりがきれいだし、解説も豊富。Flashの実践的な作り方をきちんと書いてある本はほとんどないので、それだけで買う価値はある。</p>
				<h3>12.FLASH OOP for ActionScript 3.0</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4798116300?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4798116300&amp;adid=0M5TYSX9B5Z06KYHD4N4&amp;"><img src="http://rcm-images.amazon.com/images/I/51J-MQ+FUOL._SL100_.jpg"/></a></p>
				<p>★★★☆☆。OOPとは少し違う。</p>
				<p>AS版と比べて、OOPに比重が置かれていない。初心者には難しいだろうし、上級者ならすぐわかるだろうし…といった中途半端感が目立つ。もうすこしページがあってもいいのではないか。値段も高いんだから。</p>
				<h2>2008-07～09月に読んだ本</h2>
				<h3>13.Adobe Flash CS3 詳細! ActionScript3.0入門ノート2</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4881666460?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4881666460&amp;adid=1H1S8B6K7YA4G23QW54A&amp;"><img src="http://rcm-images.amazon.com/images/I/41ck4PZgokL._SL100_.jpg"/></a></p>
				<p>★★☆☆☆。入門ノート1の続編。</p>
				<p>入門ノート1がかなりわかりやすかったので買ってみた。内容はそれほど高度なことや必要性のあることでもない（FLVのキャプションはそんなに必要ないだろう）。こちらは立ち読みをして購買の検討をすればいいと思う。</p>
				<h3>14.ゲーム開発のための数学・物理学入門</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4797329076?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4797329076&amp;adid=1V1NZ1KSJVYG4M7FPAYH&amp;"><img src="http://rcm-images.amazon.com/images/I/415j8ZMKcOL._SL100_.jpg"/></a></p>
				<p>★★★☆☆。最近はAS3の<a href="http://www.amazon.co.jp/gp/product/4797351411?ie=UTF8&#038;tag=kpd-22&#038;linkCode=as2&#038;camp=247&#038;creative=7399&#038;creativeASIN=4797351411">数学・物理学本</a><img src="http://www.assoc-amazon.jp/e/ir?t=kpd-22&#038;l=as2&#038;o=9&#038;a=4797351411" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />も出たみたいなので、そっち読めばいいのではないか。僕も今買った。</p>
				<p>この本は説明をかなりはしょるけれど、公式は暗記すればいいのでそんなのでもいいかもしれない。高校数学どまりでも読めるけど、わけわからないぜ！これを乗り切らないと野たれ死ぬだけなので頑張ろう。</p>
				<h3>15.実例で学ぶゲームAIプログラミング</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4873113393?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4873113393&amp;adid=0P7QK1YVWSP7ST30F8FE&amp;"><img src="http://rcm-images.amazon.com/images/I/51XL7t+DJ8L._SL100_.jpg"/></a></p>
				<p>★★★★☆。ゲームの世界に衝撃を受けた。</p>
				<p>ゲーム業界のノウハウはすごい。こんな膨大な知識が埋まっているとは。</p>
				<p>内容は単純なステートパターンから探索行動まで、きっちり書かれてる。もうここまでくるとデザイナ上がりのFlasherは太刀打ちできないレベル。しかし、ここを理解できないとそのうち野たれ死ぬだろう。ノード探索とかはしっかり覚えたいところ。</p>
				<h3>16.増補改訂版Java言語で学ぶデザインパターン入門</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4797327030?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4797327030&amp;adid=0XXYD5PF4KHTZMN9YXFK&amp;"><img src="http://rcm-images.amazon.com/images/I/51KjORDEySL._SL100_.jpg"/></a></p>
				<p><strong>★★★★★。オススメ。</strong>日本人のデザパタ本。読みやすくわかりやすい。</p>
				<p>デザパタ本はずーっとGoF本と周辺本を読んでたけど、ぜんぜんわからん。ごめん言い過ぎた、なんとなくはわかる。でも「えっ？デザインパターン？ああ、となりのクラスの？」という顔見知りレベルを脱却できない。つまりなんにも使えないのだ。</p>
				<p>しかし、この本は相当わかりやすい。わかりやすすぎて、Decoratorパターンはそんなに使う必要がないこともなんとなくわかる。抽象化して思考することを嫌というほど叩き込んでくれるので、パターンやOOPの本質を理解できるし、どのように応用すべきかもなんとなくわかる。デザパタ本ってそういうところが重要なんだわ。</p>
				<h2>2008-10～12月に読んだ本</h2>
				<h3>17.達人プログラマー―システム開発の職人から名匠への道</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4894712741?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4894712741&amp;adid=1VNWPHKEN539W8SEZSQB&amp;"><img src="http://rcm-images.amazon.com/images/I/41HTQ8ZP3AL._SL100_.jpg"/></a></p>
				<p><strong>★★★★★。オススメ。</strong>達人がなんたるかをなんとなく理解できる。</p>
				<p>Web業界の歴史は浅いので、なかなか達人や師匠に巡り合えない。また、Flashなんて大抵1人で開発が終了するから、技を盗むことも至難だ。Web業界における「達人から盗む」という作業は、「他の業界の達人」から盗んだ方が効率がいい。この本は徹底した達人の姿勢を教えてくれる。個人的には「<a href="http://ja.wikipedia.org/wiki/割れ窓理論">割れ窓理論</a>」がマジウケるんだけど～！</p>
				<h3>18.ゲームプログラマになる前に覚えておきたい技術</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4798021180?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4798021180&amp;adid=17GH8WXSJ5FBWX4XCFP9&amp;"><img src="http://rcm-images.amazon.com/images/I/41flEUQw-KL._SL100_.jpg"/></a></p>
				<p><strong>★★★★★★★★★★。超オススメ。</strong>通称セガ本。セガの偉い人が新人教育用に書いた本。</p>
				<p>これはすごい。どうしてこういう作りの戦略をとるか、最適化を行うかなどなどありったけのノウハウを詰め込んでる。まったくノウハウがない新人に教える感覚なので、Flasherみたいな独学大王たちはこの本からものすごくたくさんのことを学べるはずだ。まじで（僕のamazonリンクから）買えばいいと思う。</p>
				<h3>19.詳説 ActionScript 3.0</h3>
				<p class="amazonImg"><a target="_blank" href="http://www.amazon.co.jp/dp/4873113873?tag=kpd-22&amp;camp=1027&amp;creative=7407&amp;linkCode=as4&amp;creativeASIN=4873113873&amp;adid=0WTDRMF244N42N0AN5ET&amp;"><img src="http://rcm-images.amazon.com/images/I/514SnR1V4yL._SL100_.jpg"/></a></p>
				<p>★★★★☆。せめて半年前に読みたかった。もうFlash10が来てるんだぜ！</p>
				<p>広大なアメリカ大陸から西へ西へと遥々やってきたコリンムックさんの本。さあ、ここにはいったいどんな動物がムツゴロウさんを待ち構えているんでしょうか？</p>
				<p>ムツゴロウ「いや～かわいいですね～、これを見てください。表紙をみてください。アメリカサンゴヘビですね～。アメリカサンゴヘビは毒を持っていて、この毒が獲物の体に回るまで噛みついたまま離さないんですね～」</p>
				<h2>まとめると…「Flasher1年生は2学期からFlashの本を読むな」</h2>
				<p>みなさんお気づきの通り、ムツゴロウさんのナレーションは間違いなく不要でしたね。高枝切りバサミに付いてくる普通のハサミと同じくらい不要ですね。</p>
				<p>それはさておき、これらを一言でまとめると</p>
				<p><strong>「Flasher1年生は2学期からFlashの本を読むな」</strong></p>
				<p>ということです。いまのところFlash本でかっちりとした構築ノウハウを提供してくれる本はあまり見かけません。それならいっそのこと他の分野からノウハウを移植したほうが効率的です。</p>
				<p>最初の4～6ヵ月でASの基礎を固めておいて、あとはデザインパターンや数学など、他分野から吸収したほうがよさげです。</p>
				<p>特にゲームはFlashと近いところにいます。uiがあって、ローディングがあって、動的に画面が遷移して…と、かなり似ています。衝突判定やAI、画像処理など山のようにノウハウが蓄積されています。僕は今後がっつりこっちの本を読もうと思っています。</p>
				<p>それと、あと1冊で20冊というキリのいい数字なのにどうして19冊なのか？そう思いますよね。いや、読んでるんです。50ページ以上ね。読んでるんです。なんだったら2周読んでます。でもね、その1冊が通学路で拾ったエロ本だったんです。</p>
				<p><em>よいお年を～！！</em></p>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2008/12/31/19_books_a_flashman_read/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AS2で遅くなる書き方を研究しようか</title>
		<link>http://katapad.com/wp/2008/05/28/experiment_slow_script_as2/</link>
		<comments>http://katapad.com/wp/2008/05/28/experiment_slow_script_as2/#comments</comments>
		<pubDate>Tue, 27 May 2008 18:03:40 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[as2]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=39</guid>
		<description><![CDATA[上条さんとこで、AS2でOOPをやると遅くなる可能性があると書いてあって泣いた。 AS3 で動的言語のススメ AS2 における型の使用は、オーサリング時の ”生産性向上のベストプラクティス” としての位置づけ以上ではないわけです。実際 OOP をまじめに追求するほど AS2 のアプリケーションは遅くなる傾向を持っています。 気になったので、単純なカウントアップでベンチマークをとった。 試したところは以下 タイムラインに書くかクラスに書くか 型宣言の有無 処理をfunctionにくるむかどうか AS2でタイムラインに書く。型宣言はなし //型宣言なし var startTime = getTimer(); var trialNum = 100000; var cnt = 0; for (var i:Number = 0; i &#60; trialNum; i++) { cnt++; } benchmark(); function benchmark() { var endTime = getTimer(); trace(&#34;time: &#34; + (endTime - [...]]]></description>
			<content:encoded><![CDATA[				<h2 id="contenttest_2_0">上条さんとこで、AS2でOOPをやると遅くなる可能性があると書いてあって泣いた。</h2>
				<p><a href="http://weblogs.macromedia.com/akamijo/archives/2007/05/as3_1.html">AS3 で動的言語のススメ</a></p>
				<blockquote><p class="modPuki_quotation">AS2 における型の使用は、オーサリング時の ”生産性向上のベストプラクティス” としての位置づけ以上ではないわけです。実際 OOP をまじめに追求するほど AS2 のアプリケーションは遅くなる傾向を持っています。</p>
				</blockquote>
				<p>気になったので、単純なカウントアップでベンチマークをとった。</p>
				<p>試したところは以下</p>
				<ul>
				<li>タイムラインに書くかクラスに書くか</li>
				<li>型宣言の有無</li>
				<li>処理をfunctionにくるむかどうか</li>
				</ul>
				<h3 id="contenttest_3_1">AS2でタイムラインに書く。型宣言はなし</h3>
				<pre class="modPuki_pre">//型宣言なし
var startTime = getTimer();
var trialNum = 100000;
var cnt = 0;

for (var i:Number = 0; i &lt; trialNum; i++) {
	cnt++;
}
benchmark();

function benchmark()
{
	var endTime = getTimer();
	trace(&quot;time: &quot; + (endTime - startTime));
}
//だいたい228</pre>
				<h3 id="contenttest_3_2">AS2でタイムラインに書く。型宣言あり・カウントアップは生で書く</h3>
				<pre class="modPuki_pre">//型宣言あり
var startTime:Number = getTimer();
var trialNum:Number = 100000;
var cnt:Number = 0;

for (var i:Number = 0; i &lt; trialNum; i++) {
	cnt++
}

benchmark();

function benchmark()
{
	var endTime:Number = getTimer();
	trace(&quot;time: &quot; + (endTime - startTime));
}

//だいたい230</pre>
				<h3 id="contenttest_3_3">AS2でタイムラインに書く。型宣言あり・カウントアップはfunctionにくるむ</h3>
				<p>リファクタリングの本やOOPの本を読んでいると、できるだけ細かいfunctionに分けるべきだ、と書いてある。確かにそのほうがやりやすいが、やればやるほど遅くなる気はしていた。</p>
				<pre style="height:24.6em;" class="modPuki_pre">//型宣言あり,function
var startTime:Number = getTimer();
var trialNum:Number = 100000;
var cnt:Number = 0;

for (var i:Number = 0; i &lt; trialNum; i++) {
	countUp();
}

benchmark();

function countUp():Void
{
	cnt++;
}

function benchmark():Void
{
	var endTime:Number = getTimer();
	trace(&quot;time: &quot; + (endTime - startTime));
}

//だいたい709</pre>
				<h3 id="contenttest_3_4">クラスに書く</h3>
				<p>クラスに書いてみた。やってる中身は上とほとんど一緒。試したのは以下。</p>
				<ul>
				<li>型あり</li>
				<li>型あり・function</li>
				<li>型あり・別クラスstatic function</li>
				<li>型あり・別クラスを参照static function<br />
				「型あり・別クラスstatic function」は</p>
				<pre class="modPuki_pre">for (var i:Number = 0; i &lt; trialNum; i++) {
	cnt = sandbox.BenchTest.countUp(cnt);
}</pre>
				</li>
				</ul>
				<p>「型あり・別クラスstatic function」は</p>
				<pre class="modPuki_pre">var test:BenchTest = BenchTest;
for (var i:Number = 0; i &lt; trialNum; i++) {
	cnt = test.countUp(cnt);
}</pre>
				<h2 id="contenttest_2_5">AS2速度まとめ</h2>
				<div class="modPuki_ie5" >
				<table class="modPuki_style_table" style="">
				<thead>
				<tr>
				<td class="modPuki_style_td"></td>
				<th class="modPuki_style_th">型なし</th>
				<th class="modPuki_style_th">型あり</th>
				<th class="modPuki_style_th">型あり・function</th>
				<th class="modPuki_style_th">型あり・別クラスstatic function</th>
				<th class="modPuki_style_th">型あり・別クラスを参照static function</th>
				</tr>
				</thead>
				<tbody>
				<tr>
				<th class="modPuki_style_th">タイムライン</th>
				<td class="modPuki_style_td">228</td>
				<td class="modPuki_style_td">230</td>
				<td class="modPuki_style_td">708</td>
				<td class="modPuki_style_td">455</td>
				<td class="modPuki_style_td"></td>
				</tr>
				<tr>
				<th class="modPuki_style_th">クラス</th>
				<td class="modPuki_style_td">102</td>
				<td class="modPuki_style_td">101</td>
				<td class="modPuki_style_td">245</td>
				<td class="modPuki_style_td">313</td>
				<td class="modPuki_style_td">227</td>
				</tr>
				</tbody>
				</table>
				</div>
				<p>ループ処理だけでの単純な比較なので、あまりあてにならない。</p>
				<p>実際のところどっちが速いのかよくわからん、という結果になった。とりあえず、タイムラインでのfunctionがやたら遅いということがわかった。<a href="http://www.imajuk.com/blog/archives/2008/04/post_4.html">アクティベーションオブジェクト</a>のせいだろうか。</p>
				<p>でも、OOPにのっとってめちゃくちゃ細かく分割すると、遅くなることは事実だろう。わりと、お茶濁しな結果に！</p>
				<h2 id="contenttest_2_6">AS3とAS2での差はクラスのメンバにあるかどうかでかなり変わる</h2>
				<h3 id="contenttest_3_7">AS3では</h3>
				<pre class="modPuki_pre">var point:Point = new Point(x,y)
point.x++;</pre>
				<p>と書くとめちゃくちゃ早い。メンバ変数であるかどうかがかなりの違いの模様。</p>
				<p>これを単なるオブジェクトとして扱うとめちゃんこ遅くなる。ハッシュがどうのこうのらしい。配列はそこそこ早い。<br />
				<a href="http://d.hatena.ne.jp/nishiohirokazu/20080207/1202376013">PointとArrayで速度比較</a></p>
				<pre class="modPuki_pre">var obj:Object = new Object();
obj.x = 1;
obj.x++;</pre>
				<h3 id="contenttest_3_8">AS2ではどれをやってもほとんど同じ速度だった。</h3>
				<p>さっさとAS3に全部移りたいぜ！</p>
				<pre class="modPuki_pre">//var point:Point = new Point(1, 1);
//var obj:Object = new Object();
//obj.x = 1;
var array:Array = [1];
for (var i:Number = 0; i &lt; trialNum; i++) {
	//point.x++;
	//obj.x++;
	array[0]++;
}</pre>
				<dl>
				<dt>AS2でメンバとかの速度</dt>
				<dd>
				<div class="modPuki_ie5" >
				<table class="modPuki_style_table" style="">
				<thead>
				<tr>
				<td class="modPuki_style_td">point.x++;</td>
				<td class="modPuki_style_td">obj.x++;</td>
				<td class="modPuki_style_td">array[0]++;</td>
				</tr>
				</thead>
				<tbody>
				<tr>
				<td class="modPuki_style_td">94</td>
				<td class="modPuki_style_td">93</td>
				<td class="modPuki_style_td">106</td>
				</tr>
				</tbody>
				</table>
				</div>
				</dd>
				</dl>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2008/05/28/experiment_slow_script_as2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>いまさらDelegate.createを理解しようと思ったけれど、謎が深まった愛され系の俺</title>
		<link>http://katapad.com/wp/2008/05/25/study_as2_delegate_create/</link>
		<comments>http://katapad.com/wp/2008/05/25/study_as2_delegate_create/#comments</comments>
		<pubDate>Sat, 24 May 2008 18:18:24 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/?p=37</guid>
		<description><![CDATA[長らくAS2でお世話になっているおまじない、Delegate.create。ただなんとなしに使うのではなく、そろそろ理解しようと思い調べてみました。 理解するためには2つ必要でした。 argumentsオブジェクトの理解 Functionクラスの理解 argumentsオブジェクトの理解 argumentsオブジェクトは引数オブジェクトのことです。アクセスするには配列演算子を用いますが、単なる配列とは異なるようです。 argumentsオブジェクトにはcallerとcalleeプロパティが存在します。 arguments.caller 現在実行中の関数を呼び出した関数への参照となります。関数オブジェクトはdynamicクラスなので、あとからいくらでもプロパティを追加できるので、実際に参照しているのかテストしてみましょう。 function firstStep(){ secondStep(); } firstStep._x = 1; function secondStep(){ trace(arguments.caller._x); arguments.caller._x++; } firstStep(); //1が出力される firstStep(); //2が出力される firstStep(); //3が出力される arguments.callee 現在実行中の関数への参照となります。 Functionクラスの理解 Function.apply() Function.apply(scope:Object, [argArray: Array ]) :Void functionオブジェクトのthisを置き換えるのがこのapplyメソッド。 これをうまく使えばmc.onReleaseなどのthisが変わるめんどくささから解放されます。 以上を踏まえて、mx.utils.Delegate.create()では何をしているのかというと まずはmx.utils.Delegate.create()のコードを見てみましょう。 static function create(obj:Object, func:Function):Function { var f = function() { var target = arguments.callee.target; var [...]]]></description>
			<content:encoded><![CDATA[				<p>長らくAS2でお世話になっているおまじない、Delegate.create。ただなんとなしに使うのではなく、そろそろ理解しようと思い調べてみました。</p>
				<p>理解するためには2つ必要でした。</p>
				<ol>
				<li>argumentsオブジェクトの理解</li>
				<li>Functionクラスの理解</li>
				</ol>
				<h2 id="contenttest_2_0">argumentsオブジェクトの理解</h2>
				<p>argumentsオブジェクトは引数オブジェクトのことです。アクセスするには配列演算子を用いますが、単なる配列とは異なるようです。</p>
				<p>argumentsオブジェクトにはcallerとcalleeプロパティが存在します。</p>
				<h3 id="contenttest_3_1">arguments.caller</h3>
				<p>現在実行中の関数を呼び出した関数への参照となります。関数オブジェクトはdynamicクラスなので、あとからいくらでもプロパティを追加できるので、実際に参照しているのかテストしてみましょう。</p>
				<pre class="modPuki_pre">function firstStep(){
	secondStep();
}
firstStep._x = 1;

function secondStep(){
	trace(arguments.caller._x);
	arguments.caller._x++;
}
firstStep();   //1が出力される
firstStep();   //2が出力される
firstStep();   //3が出力される</pre>
				<h3 id="contenttest_3_2">arguments.callee</h3>
				<p>現在実行中の関数への参照となります。</p>
				<h2 id="contenttest_2_3">Functionクラスの理解</h2>
				<h3 id="contenttest_3_4">Function.apply()</h3>
				<p>Function.apply(scope:Object, [argArray: Array ]) :Void</p>
				<p>functionオブジェクトのthisを置き換えるのがこのapplyメソッド。<br />
				これをうまく使えばmc.onReleaseなどのthisが変わるめんどくささから解放されます。</p>
				<h2 id="contenttest_2_5">以上を踏まえて、mx.utils.Delegate.create()では何をしているのかというと</h2>
				<p>まずはmx.utils.Delegate.create()のコードを見てみましょう。</p>
				<pre class="modPuki_pre">static function create(obj:Object, func:Function):Function
{
	var f = function()
	{
		var target = arguments.callee.target;
		var func = arguments.callee.func;
		return func.apply(target, arguments);
	};

	f.target = obj;
	f.func = func;
	return f;
}</pre>
				<ol>
				<li>functionオブジェクト（var f）を作成</li>
				<li>functionオブジェクトに匿名関数を参照させる</li>
				<li>functionオブジェクトはdynamicクラスなので、追加プロパティを作れる
				<ul>
				<li>scopeとなるobjectと関数を保持させる</li>
				</ul>
				</li>
				<li>匿名関数内で、arguments.calleeを使って、自身（現在の関数）を参照し、
				<ul>
				<li>先ほど保持したscopeと関数を拾う。</li>
				<li>func.apply()で意図したscopeにfuncを割り当てる（thisを変える）</li>
				</ul>
				</li>
				</ol>
				<p>だいたいこんな感じでした。しかしながら、func.apply()には同時に引数も渡せるはずです。なので、ちょっと付け足してみました。</p>
				<pre class="modPuki_pre">static function createWithArgs(obj:Object, func:Function, args:Array):Function
{
	var f = function()
	{
		var target = arguments.callee.target;
		var func = arguments.callee.func;
		return func.apply(target, arguments.callee.args.concat()); //ここを追加
	};

	f.target = obj;
	f.func = func;
	f.args = args; //ここを追加
	return f;
}</pre>
				<p>applyメソッドの第2引数にarguments.callee.args.concat()を追加するとうまく引数を登録できます。<br />
				引数の配列となるargsはconcatしないとうまく動作しません。</p>
				<p>このあたりがさっぱりわからなかったので、ググってみましたがめぼしいものは見つからずさらに謎の動作まで見つけてしまいました。</p>
				<p><a href="http://library.sfug.ch/trac/browser/trunk/doc/as2/examples/sfug_as2lib/ch/sfug/utils/Delegate.as" target="_blank">http://library.sfug.ch/trac/browser/trunk/doc/as2/examples/sfug_as2lib/ch/sfug/utils/Delegate.as</a></p>
				<p>ここはarguments.shift()でscopeとfuncを定義してるあたりがおもしろいですね。concat(arguments)でさらにdelegateした後で呼び出したときの引数も定義しています。なぜargumentsが使えるのかがなんとなくでしかわからないので、完全なる理解にはしばらく時間がかかりそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2008/05/25/study_as2_delegate_create/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>as3はじめました</title>
		<link>http://katapad.com/wp/2008/01/21/hello_world_as3/</link>
		<comments>http://katapad.com/wp/2008/01/21/hello_world_as3/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 14:37:51 +0000</pubDate>
		<dc:creator>katapad</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://katapad.com/wp/2008/01/21/29/</guid>
		<description><![CDATA[さてみなさん、ときめいていますか？僕は元気です。心配しないでください。I&#8217;m fine thank you. 前回のエントリで目標を設定しました。2008-03-31までにActionScript3.0アニメーションという本を読了するのが目標です。なのでちょこちょこ記していきます。 単にサンプルを書くだけではつまらないので、TOPページにおいてあるunkoFlashをas3にして、リファクタリングする作業も合わせて課題にします。 まずはサンプルを作ったりする前に事前準備ですね。 制作環境 マシンとソフト WinXP Flash CS3 IDE（コンパイルするだけ） FlashDevelop（メインのエディタ。コード補完が最強なので、as2とas3の違いによる単純な書き損じを減らせる） Flex SDK （コンパイルするだけだがまだ導入してない。誰かが背中を押してくれたら試す) 本 Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート ActionScript 3.0 アニメーション as2との違い なんやかんややる前に事前に調査しとく。 イベント処理 Sprite.addEventListner()で自身がイベントをリスンしていることを伝える MouseEvent.MOUSE_DOWN == onPress MouseEvent.CLICK == onRelease onReleaseOutsideが削除（歓迎！） プロパティ _xなどアンダーバーがなくなる rootとmaskがプロパティになった データ型 データ型が増えた。以下増えたやつ データ型 初期値 範囲 使いどころ int 0 正負の整数 （-21億～+21億） 整数 uint 0 [...]]]></description>
			<content:encoded><![CDATA[				<p>さてみなさん、ときめいていますか？僕は元気です。心配しないでください。I&#8217;m fine thank you.</p>
				<p>前回のエントリで目標を設定しました。2008-03-31までにActionScript3.0アニメーションという本を読了するのが目標です。なのでちょこちょこ記していきます。</p>
				<p>単にサンプルを書くだけではつまらないので、<a href="/">TOPページにおいてあるunkoFlash</a>をas3にして、リファクタリングする作業も合わせて課題にします。</p>
				<p>まずはサンプルを作ったりする前に事前準備ですね。</p>
				<div class="section">
				<h2>制作環境</h2>
				<div class="section">
				<h3>マシンとソフト</h3>
				<ul>
				<li>WinXP</li>
				<li>Flash CS3 IDE<br />（コンパイルするだけ）</li>
				<li>FlashDevelop<br />（メインのエディタ。コード補完が最強なので、as2とas3の違いによる単純な書き損じを減らせる）</li>
				<li>Flex SDK <br />（コンパイルするだけだがまだ導入してない。誰かが背中を押してくれたら試す) </li>
				</ul></div>
				<p><!-- / [.section] --></p>
				<div class="section">
				<h3>本</h3>
				<ul>
				<li><a href="http://www.amazon.co.jp/gp/product/4881665901?ie=UTF8&#038;tag=kpd-22&#038;linkCode=as2&#038;camp=247&#038;creative=1211&#038;creativeASIN=4881665901">Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート </a><img src="http://www.assoc-amazon.jp/e/ir?t=kpd-22&#038;l=as2&#038;o=9&#038;a=4881665901" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></li>
				<li><a href="http://www.amazon.co.jp/gp/product/4862460496?ie=UTF8&#038;tag=kpd-22&#038;linkCode=as2&#038;camp=247&#038;creative=1211&#038;creativeASIN=4862460496">ActionScript 3.0 アニメーション</a><img src="http://www.assoc-amazon.jp/e/ir?t=kpd-22&#038;l=as2&#038;o=9&#038;a=4862460496" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></li>
				</ul></div>
				<p><!-- / [.section] --></p>
				</div>
				<p><!-- / [.section] --></p>
				<div class="section">
				<h2>as2との違い</h2>
				<p>なんやかんややる前に事前に調査しとく。</p>
				<div class="section">
				<h3>イベント処理</h3>
				<ul>
				<li>Sprite.addEventListner()で自身がイベントをリスンしていることを伝える</li>
				<li>MouseEvent.MOUSE_DOWN == onPress</li>
				<li>MouseEvent.CLICK == onRelease</li>
				<li>onReleaseOutsideが削除（歓迎！）</li>
				</ul></div>
				<p><!-- / [.section] --></p>
				<div class="section">
				<h3>プロパティ</h3>
				<ul>
				<li>_xなどアンダーバーがなくなる</li>
				<li>rootとmaskがプロパティになった</li>
				</ul></div>
				<p><!-- / [.section] --></p>
				<div class="section">
				<h3>データ型</h3>
				<p>データ型が増えた。以下増えたやつ</p>
				<table class="generalComplex">
				<thead>
				<tr>
				<th scope="col">データ型</th>
				<th scope="col">初期値</th>
				<th scope="col">範囲</th>
				<th scope="col">使いどころ</th>
				</tr>
				</thead>
				<tbody>
				<tr>
				<th scope="row">int</th>
				<td>0</td>
				<td>正負の整数<br />
				（-21億～+21億）</td>
				<td>整数</td>
				</tr>
				<tr>
				<th scope="row">uint</th>
				<td>0</td>
				<td>正の整数<br />
				（0～42億）</td>
				<td>forでi++するとき</td>
				</tr>
				</tbody>
				</table></div>
				<p><!-- / [.section] --></p>
				<div class="section">
				<h3>MCやSpriteなどの重なりとかDisplayオブジェクトらへん</h3>
				<ul>
				<li>stage.framerateでFPSを変更しまくれる</li>
				<li>rootの扱いがよくわからん。lockrootとかどうなるのか。<a href="http://oshige.com/flash/as3note/2007/04/14_rootstage.html">そのへんを大重さんが書いてた</a>けどいまいちわかってないので、もう少し勉強。外部swfからメインタイムラインにはどうやってアクセスするのか。</li>
				<li>as3からaddChild方式に変わった。htmlのDOMに似た感じ。</li>
				<li>container.setChildIndex()などで順序を切り替えていく</li>
				</ul></div>
				<p><!-- / [.section] --></p>
				<p>どこからどうログしていけばいいのか難しいですが、覚えたいことはログしていきます。</p>
				</div>
				<p><!-- / [.section] --></p>
]]></content:encoded>
			<wfw:commentRss>http://katapad.com/wp/2008/01/21/hello_world_as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
