<?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>trick7 &#187; action script</title>
	<atom:link href="http://www.trick7.com/blog/category/action-script/feed" rel="self" type="application/rss+xml" />
	<link>http://www.trick7.com/blog</link>
	<description>flashの勉強・書籍・サイトについて</description>
	<lastBuildDate>Wed, 28 Jul 2010 15:08:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>インスタンスが存在するかどうか調べるAS3</title>
		<link>http://www.trick7.com/blog/2010/03/19-011928.php</link>
		<comments>http://www.trick7.com/blog/2010/03/19-011928.php#comments</comments>
		<pubDate>Thu, 18 Mar 2010 16:19:28 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1874</guid>
		<description><![CDATA[				インスタンスが、表示リストに存在しているかどうかは、getChildByName()メソッドを使って判定することができます。(via FlashゲームPG講座 for AS3.0)(contains を使った判定方法もこの類かと)
				それとは違い、インスタンスを作ったかどうかを判定したい時がありましたよ！というのが今回のテーマ。
				
				あるクラス内で、new して&#8221;mc1&#8243;というインスタンスを生成したとする。でも&#8221;mc2&#8243;は生成せず、&#8221;mc3&#8243;は生成する。mc1と3はインスタンス生成はしたものの addChild はしていない状態。
				インスタンス名の数字の部分をint型の変数を使ってハンドリングしようとした時、
				
if(this["mc"+num]){
    addChild(this["mc"+num])
    //なんか処理
}
				で、変数numをカウントアップしていって・・みたいなコード書くと、1と3の時は動くけれど、2の時にリファレンスエラー
				ReferenceError: Error #1069: Property mc2 not found on Main(※クラス名) and there is no default value.
				になっちゃう。エラーは困る。幸い1と3の時は正常に動いているので、try,catchを使って
				
try{
    if(this["mc"+num]){
        addChild(this["mc"+num])
        //なんか処理
    }
}catch(e:Object){
  [...]]]></description>
			<content:encoded><![CDATA[				<p>インスタンスが、<strong>表示リスト</strong>に存在しているかどうかは、getChildByName()メソッドを使って判定することができます。(via <a href="http://hakuhin.jp/as3/container.html#CONTAINER_04">FlashゲームPG講座 for AS3.0</a>)(<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/display/DisplayObjectContainer.html#contains%28%29">contains を使った判定方法</a>もこの類かと)</p>
				<p>それとは違い、インスタンスを作ったかどうかを判定したい時がありましたよ！というのが今回のテーマ。</p>
				<p><span id="more-1874"></span></p>
				<p>あるクラス内で、new して&#8221;mc1&#8243;というインスタンスを生成したとする。でも&#8221;mc2&#8243;は生成せず、&#8221;mc3&#8243;は生成する。mc1と3はインスタンス生成はしたものの addChild はしていない状態。<br />
				インスタンス名の数字の部分をint型の変数を使ってハンドリングしようとした時、</p>
				<pre>
if(this["mc"+num]){
    addChild(this["mc"+num])
    //なんか処理
}</pre>
				<p>で、変数numをカウントアップしていって・・みたいなコード書くと、1と3の時は動くけれど、2の時にリファレンスエラー<br />
				ReferenceError: Error #1069: Property mc2 not found on Main(※クラス名) and there is no default value.<br />
				になっちゃう。エラーは困る。幸い1と3の時は正常に動いているので、try,catchを使って</p>
				<pre>
try{
    if(this["mc"+num]){
        addChild(this["mc"+num])
        //なんか処理
    }
}catch(e:Object){
    trace("エラーは無視するぜ");
}</pre>
				<p>という感じでエラーだけ無視して難を逃れましたと。e の type は trace(typeof e) で Object だったのでそうしておきました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2010/03/19-011928.php/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FLVPlayback コンポーネントのバッファまわり</title>
		<link>http://www.trick7.com/blog/2010/03/01-140038.php</link>
		<comments>http://www.trick7.com/blog/2010/03/01-140038.php#comments</comments>
		<pubDate>Mon, 01 Mar 2010 05:00:38 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1860</guid>
		<description><![CDATA[				再生コントロールバーのない、高画質垂れ流し動画を使うケースは、なるたけロード時間を短くすることを心がけると思います。
				FLVPlayback コンポーネントを使う場合、
				
				再生の途中で途切れない程度に十分にダウンロード（バッファ）できたら再生開始
				それでも途中でバッファがなくなったら「ローディング中ですよ」アイコンとか表示
				そこからある程度バッファが貯まったら再生開始
				
				という実装が良さそう。
				まず1は FLVPlayback コンポーネントのデフォルトのバッファ時間は0.1らしい(via:godagoda.net)ので、5秒ぐらいにする。僕もプログレッシブダウンロードなんで「低速環境で画質アップ」効果を期待。
				//バッファタイムをデフォルト0.1から５秒に変更
my_flvPlayback.bufferTime = 5;
				2は bufferingStateEntered イベントを監視して、途中でバッファの為に動画が一時停止したらローディングアイコンをaddChildして表示する。bufferingStateEntered は途中で止まる時だけじゃなく、しょっぱなも呼び出されるイベントだということに注意。
				再び再生が開始されたら playingStateEntered イベントでローディングアイコンを消す。
				このときの再生って、また bufferTime で設定した秒数ぶん（5秒）バッファできたら再開するってことでいいのかな。（※今から2,3を実装するところ）
				FLVPlayback コンポーネント上に FLV ロードするような場合、ローカル環境上の「ダウンロードのシュミレート」ではシュミレートできないらしく、サーバーにアップして試すんだけど、今時ネットも高速回線なので、なかなかこういった低速回線用のデバッグが面倒。
				追記：Firefox Throttle(Windowsのみ) というアドオンを使えば、回線速度を低速シミュレートできると kinkuma_design さまに教えていただきました。
				追記2：上記2,3も実装。シークバーのないビデオコンテンツだとしても、ローディング状況を確認しつつ開発したい時は、コンポーネントインスペクタから、SeekBarをステージ上に配置して、インスタンス名 sb（任意）とした時
				my_flvPlayback.seekBar = sb;
とするだけでローディング状況をバーで知ることができて簡単。あとはお好みで BufferingBar も使えます。こちらはバッファ状態になった時だけ床屋のくるくるみたいなのが表示されるというパーツ。
別方法として FLVPlayback コンポーネントにスキンをあてる方法もあるけど、なぜか当て込むと コンポーネントのwidthが２倍に算出されておかしかったのでやめた。スキンの場合はスキン用のswfも別途アップロードするのを忘れずに。
追記3：バッファ状況も十分なのに映像が止まることがある。裏側でガベージコレクションが発動してる疑惑。もしそうなら、動画再生中は強制的に GC を止めたい。できるのか？
追記4：ここまでの記事を全部見直し。再生が始まった後で、ダウンロード待ちの状態に戻して十分にダウンロードされてから自動的に再生を再開するには、pause() メソッドを使用し、次に playWhenEnoughDownloaded() メソッドを使用します。とある。3 の playingStateEntered も「バッファリング状態に移行してから再生状態に移行することが多いので、play() メソッドを呼び出した直後または対応するコントロールをクリックした直後には、イベントが発生しない場合があります。」とあるので、上記リスト通りの実装すると信頼性低くなるなこりゃ。
playingStateEntered がデリケートなんだったら stateChange で監視しようと思ったんだけど、同じ動画を再度見ようとすると STATE_CHANGE すら動かない場合がある。困った。
ここまでわかったのは、VideoEvent.READY だからといって、即 playWhenEnoughDownloaded() とは限らないので、playWhenEnoughDownloaded() で再生スタートしたタイミングで任意メソッドを動かしたいんだけど、playingStateEntered も stateChange も（ローカルでは動くのに、ネットに上げると）バッファされないケース（でもstateは変わってるのになぁ？）で呼び出されないケースがあるからこれから独自実装しようとしている。
]]></description>
			<content:encoded><![CDATA[				<p>再生コントロールバーのない、高画質垂れ流し動画を使うケースは、なるたけロード時間を短くすることを心がけると思います。<br />
				FLVPlayback コンポーネントを使う場合、</p>
				<ol>
				<li>再生の途中で途切れない程度に十分にダウンロード（バッファ）できたら再生開始</li>
				<li>それでも途中でバッファがなくなったら「ローディング中ですよ」アイコンとか表示</li>
				<li>そこからある程度バッファが貯まったら再生開始</li>
				</ol>
				<p>という実装が良さそう。<br />
				まず1は FLVPlayback コンポーネントのデフォルトのバッファ時間は0.1らしい(<a href="http://www.godagoda.net/blog/2008/09/flvplayback_1.html">via:godagoda.net</a>)ので、5秒ぐらいにする。僕もプログレッシブダウンロードなんで「低速環境で画質アップ」効果を期待。</p>
				<pre>//バッファタイムをデフォルト0.1から５秒に変更
my_flvPlayback.<a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/fl/video/FLVPlayback.html#bufferTime">bufferTime</a> = 5;</pre>
				<p>2は <a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/fl/video/FLVPlayback.html#event:bufferingStateEntered">bufferingStateEntered</a> イベントを監視して、途中でバッファの為に動画が一時停止したらローディングアイコンをaddChildして表示する。bufferingStateEntered は途中で止まる時だけじゃなく、しょっぱなも呼び出されるイベントだということに注意。</p>
				<p>再び再生が開始されたら <a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/fl/video/FLVPlayback.html#event:playingStateEntered">playingStateEntered</a> イベントでローディングアイコンを消す。<br />
				このときの再生って、また bufferTime で設定した秒数ぶん（5秒）バッファできたら再開するってことでいいのかな。<br />（※今から2,3を実装するところ）<br />
				FLVPlayback コンポーネント上に FLV ロードするような場合、ローカル環境上の「ダウンロードのシュミレート」ではシュミレートできないらしく、サーバーにアップして試すんだけど、今時ネットも高速回線なので、なかなかこういった低速回線用のデバッグが面倒。</p>
				<p>追記：<a href="https://addons.mozilla.org/ja/firefox/addon/5917">Firefox Throttle</a>(Windowsのみ) というアドオンを使えば、回線速度を低速シミュレートできると <a href="http://www.kuma-de.com/">kinkuma_design さま</a>に教えていただきました。</p>
				<p>追記2：上記2,3も実装。シークバーのないビデオコンテンツだとしても、ローディング状況を確認しつつ開発したい時は、コンポーネントインスペクタから、SeekBarをステージ上に配置して、インスタンス名 sb（任意）とした時</p>
				<pre>my_flvPlayback.seekBar = sb;</pre>
<p>とするだけでローディング状況をバーで知ることができて簡単。あとはお好みで BufferingBar も使えます。こちらはバッファ状態になった時だけ床屋のくるくるみたいなのが表示されるというパーツ。<br />
別方法として FLVPlayback コンポーネントにスキンをあてる方法もあるけど、なぜか当て込むと コンポーネントのwidthが２倍に算出されておかしかったのでやめた。スキンの場合はスキン用のswfも別途アップロードするのを忘れずに。</p>
<p>追記3：バッファ状況も十分なのに映像が止まることがある。裏側でガベージコレクションが発動してる疑惑。もしそうなら、動画再生中は強制的に GC を止めたい。できるのか？</p>
<p>追記4：ここまでの記事を全部見直し。再生が始まった後で、ダウンロード待ちの状態に戻して十分にダウンロードされてから自動的に再生を再開するには、pause() メソッドを使用し、次に playWhenEnoughDownloaded() メソッドを使用します。とある。3 の playingStateEntered も「バッファリング状態に移行してから再生状態に移行することが多いので、play() メソッドを呼び出した直後または対応するコントロールをクリックした直後には、イベントが発生しない場合があります。」とあるので、上記リスト通りの実装すると信頼性低くなるなこりゃ。</p>
<p>playingStateEntered がデリケートなんだったら stateChange で監視しようと思ったんだけど、同じ動画を再度見ようとすると STATE_CHANGE すら動かない場合がある。困った。<br />
ここまでわかったのは、VideoEvent.READY だからといって、即 playWhenEnoughDownloaded() とは限らないので、playWhenEnoughDownloaded() で再生スタートしたタイミングで任意メソッドを動かしたいんだけど、playingStateEntered も stateChange も（ローカルでは動くのに、ネットに上げると）バッファされないケース（でもstateは変わってるのになぁ？）で呼び出されないケースがあるからこれから独自実装しようとしている。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2010/03/01-140038.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FLV使う時さぁ</title>
		<link>http://www.trick7.com/blog/2010/02/15-191817.php</link>
		<comments>http://www.trick7.com/blog/2010/02/15-191817.php#comments</comments>
		<pubDate>Mon, 15 Feb 2010 10:18:17 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1839</guid>
		<description><![CDATA[				前のエントリの
				
				FLV動画をタイムラインに貼付け、タイムライン上で所定の場所にフレームスクリプトを書いて制御する
				動画にキューポイントを設定し、制御する
				
				で、1を選ぶデメリットって何だろうなと。→追記：swf全部ロードしてからでないと再生が始まらないことか。
				→さらに追記：これ嘘でした。子swfのルートのタイムラインに貼り付けたFLVはプログレッシブダウンロードできます。feb19様にいただいたコメントを参照！
				親swfから子swfをロードする構成で、子swfのタイムラインに直接貼るか、子swfにFLVPlaybackコンポーネントを貼るかの違いであれば、どっちでもいいような、むしろ1の方が手っ取り早いように思えてきた。親swf自体にFLVPlaybackコンポーネントを用意するのが（unloadのやり方が下手くそな僕には）メモリリーク対応的にはベストかもだけど、今回それはやらないとして。やっぱりそうしたほうがいいな。最終的にはコメントに追記したような仕様にしました。メモリリークも解決しました。
]]></description>
			<content:encoded><![CDATA[				<p><a href="http://www.trick7.com/blog/2010/02/15-185843.php">前のエントリ</a>の</p>
				<ol>
				<li>FLV動画をタイムラインに貼付け、タイムライン上で所定の場所にフレームスクリプトを書いて制御する</li>
				<li>動画にキューポイントを設定し、制御する</li>
				</ol>
				<p>で、1を選ぶデメリットって何だろうなと。<br /><strong>→追記：<del datetime="2010-02-16T16:11:14+00:00">swf全部ロードしてからでないと再生が始まらない</del>ことか。</strong><br />
				→さらに追記：これ嘘でした。子swfのルートのタイムラインに貼り付けたFLVはプログレッシブダウンロードできます。feb19様にいただいたコメントを参照！<br />
				<br />親swfから子swfをロードする構成で、子swfのタイムラインに直接貼るか、子swfにFLVPlaybackコンポーネントを貼るかの違いであれば、どっちでもいいような、<del datetime="2010-02-15T14:05:23+00:00">むしろ1の方が手っ取り早いように思えてきた。</del>親swf自体にFLVPlaybackコンポーネントを用意するのが（<strong>unloadのやり方が下手くそな僕には</strong>）メモリリーク対応的にはベストかもだけど、<del datetime="2010-02-15T14:05:23+00:00">今回それはやらないとして。</del><del datetime="2010-02-16T16:11:14+00:00">やっぱりそうしたほうがいいな。</del>最終的にはコメントに追記したような仕様にしました。メモリリークも解決しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2010/02/15-191817.php/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>FLV/F4Vのキューポイント</title>
		<link>http://www.trick7.com/blog/2010/02/15-185843.php</link>
		<comments>http://www.trick7.com/blog/2010/02/15-185843.php#comments</comments>
		<pubDate>Mon, 15 Feb 2010 09:58:43 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1836</guid>
		<description><![CDATA[				動画をそのまま再生させて終わりというのではなく、動画の最後までいったらちょっと戻してループさせるとか、映像の特定のタイミングで関数を呼び出したりするときは、
				
				
				FLV動画をタイムラインに貼付け、タイムライン上で所定の場所にフレームスクリプトを書いて制御する
				動画にキューポイントを設定し、制御する
				
				が思い浮かびます。
				ただ、1の方法は動画がFLVならOKですが、F4Vだと駄目です。FLVに変換する必要があります。手元にあったのがF4Vだったので2をやってみようと思いました。（結局キューポイントを埋め込むのでFLV変換してもいいんですけどね。）
				次に、SWF上にビデオを埋め込むには
				
				Videoクラスを作って自力でいろいろ実装していく
				FLVPlaybackコンポーネントを使う
				
				方法があって、（いろいろ不評ポイントはあるものの）コンポーネントを使う方が簡単なのでここも2にする。
				さて、F4VってのはCS4の時に採用した動画形式で、要はH.264なんですが、H.264と違ってキューポイントが埋め込めるのがメリット。
				キューポイントといっても
				
				ナビゲーションキューポイント
				イベントキューポイント
				ActionScriptキューポイント
				
				の3タイプがあり、1と2はFLV/F4Vに直接埋め込むキューポイントでAdobeMediaEncoderを使って埋め込みます。3はASやFlashIDE上であとから設定できます。
				ただ、動画再生ヘッダを所定位置に移動させるseek系の指定先は（時間を直接指定する方法もありますが、キューポイントを指定先に使う場合は）ナビゲーションキューポイントしか使えません。
				キューポイントによるナビゲーションの移動は
				FLVPlaybackインスタンス.seekToNavCuePoint("キューポイント名")
でいけるとあるが、これが&#8221;Invalid seek&#8221;だと怒られる。ちゃんとナビゲーションキューポイントを指定しており、他につまづくような箇所はなさそうに思える。
なんだこれと１時間ぐらい格闘したけどわからんかったので、結局seekSeconds(秒数)メソッドを使うようにした。seekSecondsメソッドはseekと違い、引数に小数点以下 3 桁までの精度 (ミリ秒精度)で設定できる。もちろん分は秒に直して指定。１分23秒04(1:23:04)なら、83.04と指定。seekSeconds直後はコンポーネントが停止するみたいなんでmyFLVblayback.play();で再開させる。
それにしてもseekToNavCuePointが使えないのが気になる。海外でも同じInvalid seek症状な人を散見。今後deliciousして情報を追います。
追記：
FLVPlaybackコンポーネントを含む子swfをアンロードした時にFLVの音が残り続ける現象に遭遇。ipuhekeさんと同様の現象だと考え、activeVideoPlayerIndexを設定しようとするも、コンポーネントのプロパティパネルからは設定できないらしく、スクリプトから設定することになる。
もはや設計を見直した方が早そうなので、FLVPlaybackコンポーネント１個用意して、このあたりのサンプルコードを参考に作り直すことにした。
追記：
MetadataEvent.CUE_POINTイベントを監視して、ハンドラ内でキューポイント名分岐させたいとする。
eventObject.vpでインデックス（チャンネル番号的なもの）は取得できるが、eventObject.infoだと[Object Object]が返ってくるので Spark の Dumper を使って
import org.libspark.utils.Dumper;
trace(Dumper.toString(eventObject.info));
				のようにして中身を覗くと、
				$var = {
           'type' =&#60; actionscript,←キューのタイプ
           'name' =&#60; showTitle,←キュー名
           'time' =&#60; 3,←キュー設定した時間
   [...]]]></description>
			<content:encoded><![CDATA[				<p>動画をそのまま再生させて終わりというのではなく、動画の最後までいったらちょっと戻してループさせるとか、映像の特定のタイミングで関数を呼び出したりするときは、</p>
				<p><span id="more-1836"></span></p>
				<ol>
				<li>FLV動画をタイムラインに貼付け、タイムライン上で所定の場所にフレームスクリプトを書いて制御する</li>
				<li>動画にキューポイントを設定し、制御する</li>
				</ol>
				<p>が思い浮かびます。<br />
				ただ、1の方法は動画がFLVならOKですが、F4Vだと駄目です。FLVに変換する必要があります。手元にあったのがF4Vだったので2をやってみようと思いました。（結局キューポイントを埋め込むのでFLV変換してもいいんですけどね。）</p>
				<p>次に、SWF上にビデオを埋め込むには</p>
				<ol>
				<li>Videoクラスを作って自力でいろいろ実装していく</li>
				<li>FLVPlaybackコンポーネントを使う</li>
				<ul>
				<p>方法があって、（いろいろ不評ポイントはあるものの）コンポーネントを使う方が簡単なのでここも2にする。</p>
				<p>さて、F4VってのはCS4の時に採用した動画形式で、要はH.264なんですが、H.264と違ってキューポイントが埋め込めるのがメリット。<br />
				キューポイントといっても</p>
				<ol>
				<li>ナビゲーションキューポイント</li>
				<li>イベントキューポイント</li>
				<li>ActionScriptキューポイント</li>
				</ol>
				<p>の3タイプがあり、1と2はFLV/F4Vに直接埋め込むキューポイントでAdobeMediaEncoderを使って埋め込みます。3はASやFlashIDE上であとから設定できます。</p>
				<p>ただ、動画再生ヘッダを所定位置に移動させるseek系の指定先は（時間を直接指定する方法もありますが、キューポイントを指定先に使う場合は）ナビゲーションキューポイントしか使えません。</p>
				<p>キューポイントによるナビゲーションの移動は</p>
				<pre>FLVPlaybackインスタンス.seekToNavCuePoint("キューポイント名")</pre>
<p>でいけるとあるが、これが&#8221;Invalid seek&#8221;だと怒られる。ちゃんとナビゲーションキューポイントを指定しており、他につまづくような箇所はなさそうに思える。</p>
<p>なんだこれと１時間ぐらい格闘したけどわからんかったので、結局seekSeconds(秒数)メソッドを使うようにした。seekSecondsメソッドはseekと違い、引数に小数点以下 3 桁までの精度 (ミリ秒精度)で設定できる。もちろん分は秒に直して指定。１分23秒04(1:23:04)なら、83.04と指定。seekSeconds直後はコンポーネントが停止するみたいなんでmyFLVblayback.play();で再開させる。</p>
<p>それにしてもseekToNavCuePointが使えないのが気になる。海外でも同じInvalid seek症状な人を散見。今後<a href="http://delicious.com/trick7/FLVPlayback">deliciousして</a>情報を追います。</p>
<p>追記：</p>
<p>FLVPlaybackコンポーネントを含む子swfをアンロードした時にFLVの音が残り続ける現象に遭遇。<a href="http://blog.ipuheke.jp/?p=46">ipuhekeさんと同様の現象</a>だと考え、activeVideoPlayerIndexを設定しようとするも、コンポーネントのプロパティパネルからは設定できないらしく、スクリプトから設定することになる。<br />
もはや設計を見直した方が早そうなので、FLVPlaybackコンポーネント１個用意して、<a href="http://help.adobe.com/ja_JP/ActionScript/3.0_UsingComponentsAS3/WS5b3ccc516d4fbf351e63e3d118a9c65586-7fde.html">このあたりのサンプルコード</a>を参考に作り直すことにした。</p>
<p>追記：</p>
<p>MetadataEvent.CUE_POINTイベントを監視して、ハンドラ内でキューポイント名分岐させたいとする。<br />
eventObject.vpでインデックス（チャンネル番号的なもの）は取得できるが、eventObject.infoだと[Object Object]が返ってくるので <a href="http://www.libspark.org/wiki/dealforest/Dumper">Spark の Dumper</a> を使って</p>
<pre>import org.libspark.utils.Dumper;
trace(Dumper.toString(eventObject.info));</pre>
				<p>のようにして中身を覗くと、</p>
				<pre>$var = {
           'type' =&lt; actionscript,←キューのタイプ
           'name' =&lt; showTitle,←キュー名
           'time' =&lt; 3,←キュー設定した時間
       }</pre>
				<p>が入っている。よって<strong>キューポイント名は eventObject.info.name で取得できる。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2010/02/15-185843.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>子swfから親swfの変数・メソッドを呼び出す</title>
		<link>http://www.trick7.com/blog/2010/02/10-132711.php</link>
		<comments>http://www.trick7.com/blog/2010/02/10-132711.php#comments</comments>
		<pubDate>Wed, 10 Feb 2010 04:27:11 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1830</guid>
		<description><![CDATA[				flvビデオをタイムラインに貼付けてちょっとフレームアクション追加してswf化、それを子swfとして、親swfからロードして使うというケースがあるとします。
				その中で再生中のムービーのあるタイミングで親swfのメソッドを実行したいことがあります。
				つまり表題のように子swfから親swfの変数・メソッドを呼び出すというケース。
				
				僕のケースでは親swfのドキュメントクラス(Main.as)内で定義したメソッドを呼び出したかったので、子flaのフレームアクション上から、Main(root.parent.parent).hoge()みたいにキャストして呼び出そうとしたら、子swfの単品flaパブリッシュ時に「未定義である可能性が高いメソッド Main の呼び出しです。」と当然怒られる。（失敗１）
				で、キャストするのをやめて root.parent.parent.hoge() だと、
				「未定義である可能性のあるメソッド hoge を、静的型・・・」と怒られる。（失敗２）
				ネットで調べて下記記事を拝見：
				外部swfから親を呼ぶ &#124; Miscellaneous notes
				var ld:Loader = loaderInfo.loader;
var maintl:MovieClip = ld.root as MovieClip;
maintl.hoge(); // 親の関数
				と子flaのフレーム上に書いてパブリッシュ成功。親swfへのアクセスも成功。（成功１）
				あれ？Main型でキャストしなくてもhoge()たたけるの？と不思議に思って失敗１のアプローチで
				MovieClip(root.parent.parent).hoge();
でもいけた。（成功２）
※こちらの記事も参考に。あとで試させてもらおう。
AS3 読み込んだ子swfにアクセス　読み込んだ子swfから親swfにアクセス &#124; as3 &#124; メモ &#124; pandama
]]></description>
			<content:encoded><![CDATA[				<p>flvビデオをタイムラインに貼付けてちょっとフレームアクション追加してswf化、それを<strong>子swf</strong>として、<strong>親swf</strong>からロードして使うというケースがあるとします。<br />
				その中で再生中のムービーのあるタイミングで親swfのメソッドを実行したいことがあります。<br />
				つまり表題のように<strong>子swfから親swfの変数・メソッドを呼び出す</strong>というケース。</p>
				<p><span id="more-1830"></span></p>
				<p>僕のケースでは親swfのドキュメントクラス(Main.as)内で定義したメソッドを呼び出したかったので、子flaのフレームアクション上から、Main(root.parent.parent).hoge()みたいにキャストして呼び出そうとしたら、子swfの単品flaパブリッシュ時に「未定義である可能性が高いメソッド Main の呼び出しです。」と当然怒られる。<strong>（失敗１）</strong></p>
				<p>で、キャストするのをやめて root.parent.parent.hoge() だと、<br />
				「未定義である可能性のあるメソッド hoge を、静的型・・・」と怒られる。<strong>（失敗２）</strong></p>
				<p>ネットで調べて下記記事を拝見：</p>
				<p><a href="http://www.insprt.com/blog/?p=73">外部swfから親を呼ぶ | Miscellaneous notes</a></p>
				<pre>var ld:Loader = loaderInfo.loader;
var maintl:MovieClip = ld.root as MovieClip;
maintl.hoge(); // 親の関数</pre>
				<p>と子flaのフレーム上に書いてパブリッシュ成功。親swfへのアクセスも成功。<strong>（成功１）</strong></p>
				<p>あれ？Main型でキャストしなくてもhoge()たたけるの？と不思議に思って失敗１のアプローチで</p>
				<pre>MovieClip(root.parent.parent).hoge();</pre>
<p>でもいけた。<strong>（成功２）</strong></p>
<p>※こちらの記事も参考に。あとで試させてもらおう。<br />
<a href="http://www.pandama.net/memo/2009/10/as3-swfswfswf.php">AS3 読み込んだ子swfにアクセス　読み込んだ子swfから親swfにアクセス | as3 | メモ | pandama</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2010/02/10-132711.php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>addEventListenerで実行するメソッドにパラメーター渡す</title>
		<link>http://www.trick7.com/blog/2009/08/25-145851.php</link>
		<comments>http://www.trick7.com/blog/2009/08/25-145851.php#comments</comments>
		<pubDate>Tue, 25 Aug 2009 05:58:51 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1406</guid>
		<description><![CDATA[				タイトルの通り、そういうことをしたい時があります。
				探したら apeirophobia さまのブログに書かれていました。
				apeirophobia: addEventListenerで一緒に引数を渡したい
				addEventListener(Event.SELECT, hoge(3));
private function hoge(num:int){
	return function(e:Event):void{
		trace("番号："+num);
	}
}
				みたいな感じにするそうな。
				hogeメソッドにvoid指定するとなんでエラーになるのかとか、そういうプログラム的なことにあまり興味が湧かずにコピペして動いて安心してしまう僕はプログラマ属性ゼロだなぁと思ったりした。
]]></description>
			<content:encoded><![CDATA[				<p>タイトルの通り、そういうことをしたい時があります。</p>
				<p>探したら apeirophobia さまのブログに書かれていました。<br />
				<a href="http://blog.img8.com/archives/2008/04/003758.html">apeirophobia: addEventListenerで一緒に引数を渡したい</a></p>
				<pre>addEventListener(Event.SELECT, hoge(3));
private function hoge(num:int){
	return function(e:Event):void{
		trace("番号："+num);
	}
}</pre>
				<p>みたいな感じにするそうな。<br />
				hogeメソッドにvoid指定するとなんでエラーになるのかとか、そういうプログラム的なことにあまり興味が湧かずにコピペして動いて安心してしまう僕はプログラマ属性ゼロだなぁと思ったりした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2009/08/25-145851.php/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ある条件下でのフレームのランダム移動における再帰処理</title>
		<link>http://www.trick7.com/blog/2009/08/07-133839.php</link>
		<comments>http://www.trick7.com/blog/2009/08/07-133839.php#comments</comments>
		<pubDate>Fri, 07 Aug 2009 04:38:39 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1354</guid>
		<description><![CDATA[				あまりこんなケースはないと思うけれど、
				あるムービークリップシンボルのフレーム内を直前のフレームと重複がないように移動させたい。ただし次に移動すべきフレームは配列として[1,4,5,10]のような配列に記録されている時：
				
				myMc.gotoAndStop(shuffleFrame(nextArray))
function shuffleFrame(arr:Array):Number{
	var rdm = Math.floor(Math.random()*arr.length);
	var jumpFrame:Number = nextArray[rdm];
	var preFrame:Number = myMc._currentframe;
	if(preFrame==jumpFrame){
		return shuffleFrame(arr);
	}else{
		return jumpFrame;
	}
}
				再帰処理する時の return が必要なのかどうなのか迷ってはまったという覚え書き。AS2です。
]]></description>
			<content:encoded><![CDATA[				<p>あまりこんなケースはないと思うけれど、<br />
				あるムービークリップシンボルのフレーム内を直前のフレームと重複がないように移動させたい。ただし次に移動すべきフレームは配列として[1,4,5,10]のような配列に記録されている時：</p>
				<p><span id="more-1354"></span></p>
				<pre>myMc.gotoAndStop(shuffleFrame(nextArray))
function shuffleFrame(arr:Array):Number{
	var rdm = Math.floor(Math.random()*arr.length);
	var jumpFrame:Number = nextArray[rdm];
	var preFrame:Number = myMc._currentframe;
	if(preFrame==jumpFrame){
		<strong>return</strong> shuffleFrame(arr);
	}else{
		return jumpFrame;
	}
}</pre>
				<p>再帰処理する時の return が必要なのかどうなのか迷ってはまったという覚え書き。AS2です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2009/08/07-133839.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ランキング作る時の配列(Array)操作</title>
		<link>http://www.trick7.com/blog/2009/07/22-142020.php</link>
		<comments>http://www.trick7.com/blog/2009/07/22-142020.php#comments</comments>
		<pubDate>Wed, 22 Jul 2009 05:20:20 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1308</guid>
		<description><![CDATA[				ランキング用のデータとして「ID」「点数」を配列につっこんで保存する方法をとることがあります。
				
				ActionScript 上で並べ替えるとすると、
				var rankArr:Array=[[田中,50],[山本,97],[木田,100],[鈴木,69]]
みたいな二次元配列にする方法もあるけれど、ActionScript で二元次元配列のソートは数行コードを書く必要が出てくるので、こうじゃなくって、
var rankArr:Array=[{id:田中,score:50},{id:山本,score:97},{id:木田,score:100},{id:鈴木,score:69}]
				という感じで id と score をキーにしたオブジェクトを配列につっこんでおいた方が
				rankArr.sortOn("score", Array.NUMERIC);
とすることで
for (var i:uint = 0; i < rankArr.length; i++ ) {
	trace(rankArr[i].id+"は"+rankArr[i].score);
}
//出力：田中は50 鈴木は69 山本は97 木田は100

				点数順で並べ替えできるのでラクチン。
				でもこの状態だと、数字の小さい順に並ぶ。ランキングは点が高い方が先頭の方がいいなと思っても、Array.DESCENDING（降順）でやるのはよくない。なんでかっていうと、NUMERIC（数値）以外のソートは String（文字列）で並べ替えるので、97,69,50,100 って感じで100の"1"を最後にもってきちゃう。
				なので、点数順の降順ソートは
				rankArr.sortOn("score", Array.NUMERIC);
rankArr.reverse();
				でいいかな。→よくない↓
				追記：
				コメントいただきました。条件パラメーターは複数同時に使えるとのことです。
				rankArr.sortOn(“score”, Array.NUMERIC &#124; Array.DESCENDING );
参考：
彩音 - Adobe AIR - 研究室 : 章 : ActionScript 3.0 : 節 : 配列の要素がオブジェクトのとき、オブジェクトの値でソートする
]]></description>
			<content:encoded><![CDATA[				<p>ランキング用のデータとして「ID」「点数」を配列につっこんで保存する方法をとることがあります。</p>
				<p><span id="more-1308"></span></p>
				<p>ActionScript 上で並べ替えるとすると、</p>
				<pre>var rankArr:Array=[[田中,50],[山本,97],[木田,100],[鈴木,69]]</pre>
<p>みたいな二次元配列にする方法もあるけれど、ActionScript で二元次元配列のソートは数行コードを書く必要が出てくるので、こうじゃなくって、</p>
<pre>var rankArr:Array=[{id:田中,score:50},{id:山本,score:97},{id:木田,score:100},{id:鈴木,score:69}]</pre>
				<p>という感じで id と score をキーにしたオブジェクトを配列につっこんでおいた方が</p>
				<pre>rankArr.sortOn("score", Array.NUMERIC);</pre>
<p>とすることで</p>
<pre>for (var i:uint = 0; i < rankArr.length; i++ ) {
	trace(rankArr[i].id+"は"+rankArr[i].score);
}
//出力：田中は50 鈴木は69 山本は97 木田は100
</pre>
				<p>点数順で並べ替えできるのでラクチン。</p>
				<p>でもこの状態だと、数字の小さい順に並ぶ。ランキングは点が高い方が先頭の方がいいなと思っても、Array.DESCENDING（降順）でやるのは<strong>よくない</strong>。なんでかっていうと、NUMERIC（数値）以外のソートは String（文字列）で並べ替えるので、97,69,50,100 って感じで100の"1"を最後にもってきちゃう。</p>
				<p>なので、点数順の降順ソートは</p>
				<pre>rankArr.sortOn("score", Array.NUMERIC);
rankArr.reverse();</pre>
				<p>でいいかな。→よくない↓</p>
				<p>追記：<br />
				コメントいただきました。条件パラメーターは複数同時に使えるとのことです。</p>
				<pre>rankArr.sortOn(“score”, <strong>Array.NUMERIC | Array.DESCENDING</strong> );</pre>
<p>参考：<br />
<a href="http://air.wixion.cc/paragraph_265.htm">彩音 - Adobe AIR - 研究室 : 章 : ActionScript 3.0 : 節 : 配列の要素がオブジェクトのとき、オブジェクトの値でソートする</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2009/07/22-142020.php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AS3 の addChildAt</title>
		<link>http://www.trick7.com/blog/2009/07/17-114813.php</link>
		<comments>http://www.trick7.com/blog/2009/07/17-114813.php#comments</comments>
		<pubDate>Fri, 17 Jul 2009 02:48:13 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1304</guid>
		<description><![CDATA[				AS3 の addChildAt(displayObject, 0);
				は Flash IDE ステージ上に直接配置しているシンボルよりも下に来るのでありがたい。とにかくある DisplayObject を表示リストで最背面に配置したいんじゃいという時に助かる。
				AS2 は ステージ直接配置のシンボルより下に attachMovie するのは面倒でした。
				そんなこともあるので AS3 と 2 を交互に書いたりしてると軽く混乱する。
				Adobe Docs &#8211; DispleyObjectContainer
]]></description>
			<content:encoded><![CDATA[				<p>AS3 の addChildAt(displayObject, 0);<br />
				は Flash IDE <strong>ステージ上に直接配置しているシンボルよりも下に来る</strong>のでありがたい。とにかくある DisplayObject を表示リストで最背面に配置したいんじゃいという時に助かる。</p>
				<p>AS2 は ステージ直接配置のシンボルより下に attachMovie するのは面倒でした。<br />
				そんなこともあるので AS3 と 2 を交互に書いたりしてると軽く混乱する。</p>
				<p><a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/DisplayObjectContainer.html">Adobe Docs &#8211; DispleyObjectContainer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2009/07/17-114813.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JActionScripters 始動！</title>
		<link>http://www.trick7.com/blog/2009/05/19-013145.php</link>
		<comments>http://www.trick7.com/blog/2009/05/19-013145.php#comments</comments>
		<pubDate>Mon, 18 May 2009 16:31:45 +0000</pubDate>
		<dc:creator>tera</dc:creator>
				<category><![CDATA[action script]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.trick7.com/blog/?p=1162</guid>
		<description><![CDATA[				
				JActionScripters.com
				日本の Flash/ActionScript を世界にみんなで紹介するプロジェクト「JActionScripters.com」ブログが始まりました。
				twitter 上での fladdict さんの呼びかけから3日で本オープン。海外への扉となりますね。
]]></description>
			<content:encoded><![CDATA[				<p><a href="http://blog.jactionscripters.com/"><img src="http://www.trick7.com/blog/wp-content/uploads/jas.png" alt="jas" title="jas" width="480" height="116" class="aligncenter size-full wp-image-1163" /></a><br />
				<a href="http://blog.jactionscripters.com/">JActionScripters.com</a></p>
				<p>日本の Flash/ActionScript を世界に<strong>みんなで</strong>紹介するプロジェクト「<a href="http://blog.jactionscripters.com/">JActionScripters.com」ブログ</a>が始まりました。<br />
				twitter 上での <a href="http://fladdict.net/blog/2009/05/jactionscripters.html">fladdict さん</a>の呼びかけから3日で本オープン。海外への扉となりますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trick7.com/blog/2009/05/19-013145.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
