<?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>memo.393 &#187; AS3</title>
	<atom:link href="http://memo.393.bz/archives/tag/as3/feed" rel="self" type="application/rss+xml" />
	<link>http://memo.393.bz</link>
	<description>個人的メモです。間違いなどありましたらご指摘ください。。。</description>
	<lastBuildDate>Sat, 31 Jul 2010 13:55:47 +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>[AS]ActionScript3.0のコーディングスタイルの規約(FlexSDKにおける規約)</title>
		<link>http://memo.393.bz/archives/1256</link>
		<comments>http://memo.393.bz/archives/1256#comments</comments>
		<pubDate>Mon, 05 Jul 2010 10:04:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1256</guid>
		<description><![CDATA[Adobe推奨が以下のリンク
Flex SDKコード記述に関する規則とベストプラクティス
あくまでFlexSDK用っぽいので、FlashIDEがこれに準拠するかといったら微妙っぽい。
たとえば、｛で改行をどこにいれるかと [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe推奨が以下のリンク<br />
<a href="http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions-ja">Flex SDKコード記述に関する規則とベストプラクティス</a></p>
<p>あくまでFlexSDK用っぽいので、FlashIDEがこれに準拠するかといったら微妙っぽい。<br />
たとえば、｛で改行をどこにいれるかという点では、<br />
FlashＩＤＥで、ｆｕｎｃｔｉｏｎ生成のショートカットキーESC+f+nで生成されるコードは、</p>
<pre name="code" class="as">

function  () {
    //処理
}
</pre>
<p>規約では、｛を整列させると書かれている</p>
<pre name="code" class="as">

function  ()
{
    //処理
}
</pre>
<p>とはいれ、それ以外の部分は大体真似していいんじゃないかと。</p>
<p>◆気になった部分だけｍｅｍｏ<br />
・new Array()　→ []<br />
・new Object() → {}<br />
・if(flag == true) → if(flag) (flag:Boolean,Object)<br />
・as演算子よりもキャストを使う<br />
・単純な条件はifよりも三項演算子を使う （ifより遅くなるんじゃないの？)<br />
・if文が(全ての項目のステートメントが)一項目のときはブロック{}を書かない<br />
・ｆｏｒ、while、do文では必ずブロック{}を書く<br />
・protected override → override protected<br />
・static public → pubilc static<br />
・定数は全てstaticとする<br />
・変数を初期化するときはコンストラクタではなく宣言時にする。</p>
<p>？なところもあるけど一通り目を通しておいてもよさげ。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1256/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS][オレオレライブラリ]シフトキー(ctrlキー)を押してる、押してないを判定してくれるクラス</title>
		<link>http://memo.393.bz/archives/1243</link>
		<comments>http://memo.393.bz/archives/1243#comments</comments>
		<pubDate>Thu, 01 Jul 2010 23:05:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[OREORELibrary]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1243</guid>
		<description><![CDATA[製作の上であったら便利かな、と思ったのでクラス化。
◆動機
たとえば、あるボタンを押したら外部読み込み開始するとしたら、それが失敗したときなどを考慮してにエラー処理を実装しますよね。
この実装のチェックとしては、わざとエ [...]]]></description>
			<content:encoded><![CDATA[<p>製作の上であったら便利かな、と思ったのでクラス化。</p>
<p>◆動機<br />
たとえば、あるボタンを押したら外部読み込み開始するとしたら、それが失敗したときなどを考慮してにエラー処理を実装しますよね。<br />
この実装のチェックとしては、わざとエラーが起こる状態を再現してテストしなくちゃいけない。<br />
たとえば、読み込むべきURLが外部xmlに記述してあって、それが存在しないURLだった場合のエラー処理だったら、わざとxmlに記述されたURLを間違えたものに書き換えてチェックとか。<br />
というようなことを以前はやってました。<br />
が、いちいちファイル書き換えてチェックするのが面倒。</p>
<p>そこで、<br />
もしshiftキーを押しながらクリックしたら、存在しないURLを読みにいくようなロジックを最初から組んどけばテスト簡単じゃね？<br />
お客さんにエラー時の動作処理をみてもらうときも、お客さんの負担減るんじゃね？</p>
<p>ってことで、shiftキーとctrlキーが押されてるかどうかを判定するクラスを作りました。<br />
Singletonで作ってあるので、最初に初期化しちゃえば、どこからでも参照可能。<br />
消すときも、Singletonなのでクラス名で検索書ければどこで使ってるかが一目瞭然（のはず)。</p>
<p>使い方は以下のような感じ</p>
<pre name="code" class="as">

//準備
//ステージに追加、これだけでOK
addChild(AddKeyDownUtil.getInstance());

//使い方、以下のプロパティを参照して、true/falseを取得できる
//シフトキーが押されてたら、true,押されてなかったらflaseを返す
SingletonManager.getInstance().isShiftDown;//戻り値：Boolean
//コントロールキーが押されてたら、true,押されてなかったらflaseを返す
SingletonManager.getInstance().isCtrlDown;//戻り値：Boolean

//使用例）
//_btnがクリックされたときにシフトキーが押されているかいないかで処理を分岐
_btn.addEventListener(MouseEvent.CLICK, clickHandler);
private function clickHandler(e:MouseEvent):void {
    if(AddKeyDownUtil.getInstance().isShiftDown){
        //シフトキーが押されていた場合に実行したい処理
    }else{
        //シフトキーが押されていない場合に実行したい処理
    }
}
</pre>
<p>クラスファイルは以下の通り</p>
<pre name="code" class="as">

package bz393.util {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;

	/**
	 * ...
	 * @author 393
	 */
	public class AddKeyDownUtil extends Sprite{

		public static var instance:AddKeyDownUtil;
		public var isShiftDown:Boolean = false;
		public var isCtrlDown:Boolean = false;

		public function AddKeyDownUtil(enforcer:SingletonEnforcer) { };

		public static function getInstance():AddKeyDownUtil {
			if (!AddKeyDownUtil.instance) {
				AddKeyDownUtil.instance = new AddKeyDownUtil(new SingletonEnforcer());
				AddKeyDownUtil.instance.addEventListener(Event.ADDED_TO_STAGE,init);
			}
			return AddKeyDownUtil.instance;
		}

		static private function init(e:Event):void {
			AddKeyDownUtil.instance.removeEventListener(Event.ADDED_TO_STAGE, init);

			AddKeyDownUtil.getInstance().stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHander);
			AddKeyDownUtil.getInstance().stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHander);
		}

		static private function keyDownHander(e:KeyboardEvent):void {
			switch (e.keyCode) {
				case Keyboard.SHIFT:
				AddKeyDownUtil.instance.isShiftDown = true;
				break;
				case Keyboard.CONTROL:
				AddKeyDownUtil.instance.isCtrlDown = true;
				break;
			}
		}

		static private function keyUpHander(e:KeyboardEvent):void {
			switch (e.keyCode) {
				case Keyboard.SHIFT:
				AddKeyDownUtil.instance.isShiftDown = false;
				break;
				case Keyboard.CONTROL:
				AddKeyDownUtil.instance.isCtrlDown = false;
				break;
			}
		}
	}

}
class SingletonEnforcer {
};
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1243/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]StageQuality.MEDIUM以下の状態で日本語フォントを埋め込んだTextFieldの3Dプロパティを有効にすると拡大される。(ただしムービープレビューのときのみ)</title>
		<link>http://memo.393.bz/archives/1237</link>
		<comments>http://memo.393.bz/archives/1237#comments</comments>
		<pubDate>Sun, 27 Jun 2010 23:06:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashPlayer10]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1237</guid>
		<description><![CDATA[あまり意味のない情報だけど数時間ハマったのメモしとく。
まず結論から書くと、これはムービープレビューのときのみ発生(FlashCS4で確認)
ムービープレビューのときに立ち上がるFlashPlayerはブラウザに埋め込ま [...]]]></description>
			<content:encoded><![CDATA[<p>あまり意味のない情報だけど数時間ハマったのメモしとく。</p>
<p>まず結論から書くと、これはムービープレビューのときのみ発生(FlashCS4で確認)<br />
ムービープレビューのときに立ち上がるFlashPlayerはブラウザに埋め込まれてるプレイヤーとは異なるもの。<br />
まれにおかしな挙動をすることがあるのだけど、今回もその類のバグだったわけ。<br />
なので、実際にブラウザ上で確認すれば題記のような現象にはならない。</p>
<p>一応再現手順を書いておく。<br />
1.flaファイルに日本語フォントを埋め込む。(小塚ゴシックProBとする)<br />
2.ASにて、動的にTextFieldを配置(フォントサイズを16とかに)<br />
3.TextFieldに埋め込んだフォントを設定<br />
4.stage.qualityをMedium以下に設定<br />
5.TextFieldの3Dプロパティを変更(ｚ=0とか)<br />
6.ctrl+enterでムービープレビュー<br />
7.指定したフォントサイズよりもでかく表示される</p>
<p>※stage.quailtyをHIGH以上にすれば上記現象はおきません。</p>
<p>まぁ実害はないけど遭遇したら一瞬焦るので一応覚えておいたほうがいいかも。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1237/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]FlashCS4、CS5でフォント埋め込みの際、フォント名の指定には要注意（フォントスタイル違いで日本語/ローマ字が違うケース有)</title>
		<link>http://memo.393.bz/archives/1228</link>
		<comments>http://memo.393.bz/archives/1228#comments</comments>
		<pubDate>Sun, 27 Jun 2010 02:44:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1228</guid>
		<description><![CDATA[すげー、はまったのでメモ。
↓の問題でした。
[AS]フォント名を指定するときの注意（日本語？英語？）
（今、このを記事書いてるときに上のエントリーに気付いた。アホすぎる。。。)
上の記事では、FlashIDEとFlex [...]]]></description>
			<content:encoded><![CDATA[<p>すげー、はまったのでメモ。</p>
<p>↓の問題でした。<br />
<a href="http://memo.393.bz/archives/994">[AS]フォント名を指定するときの注意（日本語？英語？）</a><br />
（今、このを記事書いてるときに上のエントリーに気付いた。アホすぎる。。。)</p>
<p>上の記事では、FlashIDEとFlexSDKでフォント名が異なる？という内容だけど、<br />
FlashIDEでもバージョンによってはフォント名が異なることが発覚。<br />
※windows/mac、Flashの日本語版/英語版で結果が異なるかも<br />
※今回検証したのはwindow、日本語版</p>
<p>例1）小塚ゴシックPro レギュラーの場合<br />
CS3:小塚ゴシック Pro R (日本語で指定)<br />
CS4:Kozuka Gothic Pro R (ローマ字で指定)<br />
CS5:Kozuka Gothic Pro R (ローマ字で指定)</p>
<p>CS3は日本語で指定だったけど、CS4以降はローマ字で指定。</p>
<p>・ちなみにボールドの場合はまた違った感じに。。。<br />
例2）小塚ゴシックPro ボールドの場合<br />
CS3:小塚ゴシック Pro B (日本語で指定)<br />
CS4::Kozuka Gothic Pro B (ローマ字で指定)<br />
CS5:小塚ゴシック Pro B (日本語で指定)</p>
<p>もちろん、日本語で書くべきところをローマ字で書いたりしたら、フォントは指定されない。<br />
同じフォントなのにスタイル違いで、書き方変わるなんてそんなのわからんよ。。。</p>
<p>というわけでフォント名は直接文字列で書くのではなく、FontクラスのfontNameプロパティを使った方が間違いがおきなそう。</p>
<pre name="code" class="as">

//ライブラリにフォントを追加
//ASに書き出しにチェック
//クラス名を指定 （仮にMyFontとする)
var myFont:Font = new MyFont();
myFont.fontName;//フォント名

var tfm:TextFormat = new TextFormat();
tfm.font = myFont.fontName;//文字列で指定しない。
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1228/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]mouseEnabled=falseで下の階層にあるボタンを有効にするときの注意。</title>
		<link>http://memo.393.bz/archives/1217</link>
		<comments>http://memo.393.bz/archives/1217#comments</comments>
		<pubDate>Wed, 23 Jun 2010 09:28:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1217</guid>
		<description><![CDATA[感覚的に勘違いをしていたのでメモしておく。
言葉で書いてもうまく伝えられないので、まずは以下フレームアクションのスクリプト参照。


import flash.display.Sprite;

//1階層目
//コンテナ [...]]]></description>
			<content:encoded><![CDATA[<p>感覚的に勘違いをしていたのでメモしておく。</p>
<p>言葉で書いてもうまく伝えられないので、まずは以下フレームアクションのスクリプト参照。</p>
<pre name="code" class="as">

import flash.display.Sprite;

//1階層目
//コンテナ的sp(塗り無し）
var container01:Sprite = new Sprite();

//コンテナの背景的なもの(赤塗り）
var bg01:Sprite = new Sprite();
bg01.graphics.beginFill(0xFF0000);
bg01.graphics.drawRect(0,0,300,300);
bg01.graphics.endFill();

//ボタン的なもの
var btn01:Sprite = new Sprite();
btn01.graphics.beginFill(0x660000);
btn01.graphics.drawRect(40,40,40,40);
btn01.graphics.endFill();
btn01.buttonMode = true;

//コンテナ的なものをメインのタイムラインに配置
this.addChild(container01);
//背景的なものをコンテナに配置
container01.addChild(bg01);
//ボタン的なものをコンテナに配置
container01.addChild(btn01);

//////////////////////////////////////

//2階層目
//コンテナ的sp（塗り無し）
var container02:Sprite = new Sprite();
//1階層目が見えるように半透明にして配置をずらす
container02.alpha = .5;
container02.x = container02.y = 20;

//コンテナの背景的なもの(青塗り）
var bg02:Sprite = new Sprite();
bg02.graphics.beginFill(0x0000FF);
bg02.graphics.drawRect(0,0,300,300);
bg02.graphics.endFill();

//ボタン的なもの
var btn02:Sprite = new Sprite();
btn02.graphics.beginFill(0x000066);
btn02.graphics.drawRect(40,40,40,40);
btn02.graphics.endFill();
btn02.buttonMode = true;

//コンテナ的なものをメインのタイムラインに配置
this.addChild(container02);
//背景的なものをコンテナに配置
container02.addChild(bg02);
//ボタン的なものをコンテナに配置
container02.addChild(btn02);

//1階層目のボタンを押せるようにするには、
//2階層目の背景的なものをmouseEnabled = false
bg02.mouseEnabled = false;
//さらに、コンテナ的なspもmouseEnabled = false;
//にしないとだめ
container02.mouseEnabled = false;
</pre>
<p>はまったポイントは2階層目のコンテナ自身に対してもmouseEnable=falseを設定してあげないといけないということ。<br />
2階層目のコンテナ自身は塗りを持ってないから、(塗りの実体である)背景だけをmouseEnable=falseにすればいいんじゃね、と思い込んでおりましたが、それだと1階層目のボタンに触れません。<br />
コンテナ自身もmouseEnabled=falseにしてやらないとだめだったのです。<br />
感覚的に、コンテナをmouseEnabled=falseにしちゃったら、コンテナが内包しているボタンもmouseEnabled=false扱いとなってしまうかと思ったら、そんなことは無いというオチ。<br />
mouseChildrenってプロパティもあるし、それぞれの機能をちゃんと理解しとかないとマズイです。。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1217/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]リスナー関数の弱参照について</title>
		<link>http://memo.393.bz/archives/1192</link>
		<comments>http://memo.393.bz/archives/1192#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:42:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1192</guid>
		<description><![CDATA[避けて通ってきたところを理解できた(気がする)のでメモ。
リスナー関数を弱参照にする場合は、addEvenListener()の第5引数をｔｒｕｅとする。


//例
//第5引数のデフォルト値はfalse
this.a [...]]]></description>
			<content:encoded><![CDATA[<p>避けて通ってきたところを理解できた(気がする)のでメモ。</p>
<p>リスナー関数を弱参照にする場合は、addEvenListener()の第5引数をｔｒｕｅとする。</p>
<pre name="code" class="as">

//例
//第5引数のデフォルト値はfalse
this.addEventListener(Event.ENTER_FRAME, this.enterFrameHandler,false,0,true);
</pre>
<p>trueを設定することでリスナー関数は弱参照となりガベージコレクション(GC)の対象となる。<br />
※弱参照とGCについては偉い人のサイトがわかりやすいです。<br />
<a href="http://blogs.adobe.com/akamijo/archives/2007/05/post_19.html">イベントリスナ （AS3） とガーベジコレクション：akihiro kamijo</a><br />
<a href="http://www.fumiononaka.com/TechNotes/Flash/FN0711001.html">Tweenのアニメーションが途中で止まる:FumioNonaka.com</a></p>
<p>はまったのはここで弱参照となるリスナー関数の状態。<br />
どういうことかというと・・・<br />
以下の処理ではリスナー関数が弱参照でGCが発動した際にenterframe処理は停止。<br />
これは認識どおり。</p>
<pre name="code" class="as">

//フレームアクション
//GCが発動するとhogeの出力が止まる。
this.addEventListener(Event.ENTER_FRAME, function(e:Event):void{trace(&quot;hoge&quot;);},false,0,true);
//※もちろん、第五引数をfalseにした場合はenterframe処理はGCが発動しても動き続ける。
</pre>
<p>でも以下のように書いた場合は、第五引数をtrueにしてあってもenterframe処理はGCが発動しても動き続ける。</p>
<pre name="code" class="as">

//フレームアクション
//GCが発動してもhogeは出力され続ける。
this.addEventListener(Event.ENTER_FRAME, this.enterFrameHandler,false,0,true);
function enterFrameHandler(e:Event):void{
trace(&quot;hoge&quot;);
}
</pre>
<p>なんで？？？参照きれて破棄されるんじゃないのと思ったら・・・<br />
リスナー関数：enterFrameHandlerの自身の参照がthisに残っているから破棄されないということらしい。</p>
<p>なのでこう書けば破棄される。</p>
<pre name="code" class="as">

//フレームアクション
//GCが発動でhogeの出力は止まる。
function init(){
this.addEventListener(Event.ENTER_FRAME, this.enterFrameHandler,false,0,true);
//関数init内にenterFrameHandlerを定義することでローカル関数となる。
function enterFrameHandler(e:Event):void{
trace(&quot;hoge&quot;);
}
}
init();
</pre>
<p>ちなみにこれではだめ。</p>
<pre name="code" class="as">

//フレームアクション
//GCが発動でもhogeの出力が止まらない。
function init(){
this.addEventListener(Event.ENTER_FRAME, this.enterFrameHandler,false,0,true);
}
//関数initの外にenterFrameHandlerを定義することで関数自身の参照が保持される。
function enterFrameHandler(e:Event):void{
trace(&quot;hoge&quot;);
}
init();
</pre>
<p>ようするに。。。<br />
第五引数をtrueにしても、弱参照になるのは、addEventLisner()とリスナー関数の関係性、と。<br />
リスナー関数自身の参照が残ってる場合はtrueにしてもそれが残って破棄されない、と。<br />
なんとなく、わかったような。。。<br />
リスナー関数自身の参照も残らないようにしないといけないということらしい。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1192/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]progression4 Index.swfからPreloaderのforeground、backgroundを参照するにはCastDocumentインスタンス経由で可能</title>
		<link>http://memo.393.bz/archives/1165</link>
		<comments>http://memo.393.bz/archives/1165#comments</comments>
		<pubDate>Tue, 01 Jun 2010 18:15:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[progression4]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1165</guid>
		<description><![CDATA[便利すぎて自分の実装力がどんどん低下してるprogression4のメモ。
Preloaderにて表示オブジェクトを追加するには、backgroundかforegroundを使うことになります。
で、index.swfに [...]]]></description>
			<content:encoded><![CDATA[<p>便利すぎて自分の実装力がどんどん低下してるprogression4のメモ。</p>
<p>Preloaderにて表示オブジェクトを追加するには、backgroundかforegroundを使うことになります。<br />
で、index.swfにてPreloaderのbackgroundおよびforegroundにアクセスするには、index.swfのドキュメントクラスであるCastDocumentがbackgroundおよびforegroundのプロパティを持っているので簡単に参照できます。</p>
<p>そこで、ちょっとはまったのが、このドキュメントクラスの参照の仕方。<br />
結論だけ書くと、こんな感じ。</p>
<pre name="code" class="as">

trace(manager.current.container.root);//出力：[object:index]
//Indexのプロパティを取得するにはIndexでキャストする。
trace(Index(manager.current.container.root).background.numChildren);
</pre>
<p>要はSceneObjectが持つcontainerプロパティのrootが、index.swfのドキュメントクラスとなっているみたい。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1165/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]BetweenAS3のグループ化は、配列を使っても管理可能。　　</title>
		<link>http://memo.393.bz/archives/1159</link>
		<comments>http://memo.393.bz/archives/1159#comments</comments>
		<pubDate>Tue, 01 Jun 2010 04:38:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[BetweenAS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1159</guid>
		<description><![CDATA[BetweenAS3でのグループ化について。
ITween.serial()、ITween.parallel()メソッドを使う場合は


//ステージ上に_mc1と_mc2のMovieClipが配置してあるとしてフレーム [...]]]></description>
			<content:encoded><![CDATA[<p>BetweenAS3でのグループ化について。<br />
ITween.serial()、ITween.parallel()メソッドを使う場合は</p>
<pre name="code" class="as">

//ステージ上に_mc1と_mc2のMovieClipが配置してあるとしてフレームアクション
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;

var iTween1:ITween =  BetweenAS3.to( _mc1 , {x:100},1);
var iTween2:ITween =  BetweenAS3.to( _mc2 , {x:100},1);
var iTween:ITween =  BetweenAS3.parallel(iTween1, iTween2);
iTween.play();
</pre>
<p>ITweenインスタンスをfor文とかで一括で作りたいときは配列で管理。<br />
その際は、parallelTweens()メソッド、serialTweens()メソッドを使う<br />
これは便利！！！</p>
<pre name="code" class="as">

//ステージ上に_mc0から_mc9の10個MovieClipが配置してあるとしてフレームアクション
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;

var iTweens:Array = [];
for(var i:int = 0; i &lt; 10; i++){
var name:String = &quot;_mc&quot; + i;
iTweens.push(BetweenAS3.to( getChildByName(name) , {x:100},1));
}
var iTween:ITween =  BetweenAS3.parallelTweens(iTweens);
iTween.play();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1159/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]as3でのスクリプトの実行の順番をmemo</title>
		<link>http://memo.393.bz/archives/1082</link>
		<comments>http://memo.393.bz/archives/1082#comments</comments>
		<pubDate>Fri, 23 Apr 2010 05:08:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1082</guid>
		<description><![CDATA[swfを開いたときに実行される順番がこんがらがることが多いので調べた。
まずはドキュメントクラスのコンストラクタとメインのタイムラインのフレームアクションの比較

1.ドキュメントクラスのコンストラクタ。
2.メインタイ [...]]]></description>
			<content:encoded><![CDATA[<p>swfを開いたときに実行される順番がこんがらがることが多いので調べた。</p>
<p>まずはドキュメントクラスのコンストラクタとメインのタイムラインのフレームアクションの比較</p>
<ul>
<li>1.ドキュメントクラスのコンストラクタ。</li>
<li>2.メインタイムラインのフレームアクション</li>
</ul>
<p>これは想像通り。</p>
<p>注意が必要なのはリンケージしたMCをnewするとき、(ドキュメントクラスの)コンストラクタでnewするか、(メインのタイムラインの)フレームアクションでnewするかというとき。<br />
※前提として、メインのタイムラインにはMc(Mc0_tl)が配置してあり、Mc0_tlには、さらにMc(Mc1_tl)が入れ子で配置してることとする。</p>
<p>まず、ドキュメントクラスのコンストラクタでnewする場合</p>
<ul>
<li>1.DocumentClass コンストラクタ開始</li>
<li>2.DocumentClass ムービークリップを動的に生成(new MyMc0_as())</li>
<li><strong>3.▲MyMc0_as コンストラクタ開始</strong></li>
<li><strong>4.▲MyMc0_as コンストラクタ終了</strong></li>
<li>5.DocumentClass ムービークリップを動的に生成終了</li>
<li>6.DocumentClass コンストラクタ終了</li>
<li><strong>7.★MyMc0_as フレームアクション開始</strong></li>
<li><strong>8.★MyMc0_as フレームアクション終了</strong></li>
<li>9.mainTimeLine フレームアクション開始</li>
<li>10.mainTimeLine フレームアクション終了</li>
<li>11.MainTimeLineに配置した Mc0_tl  フレームアクション開始</li>
<li>12.MainTimeLineに配置した Mc0_tl  フレームアクション終了</li>
<li>13.Mc0_tlに配置した Mc1_tl  フレームアクション開始</li>
<li>14.Mc0_tlに配置した Mc1_tl  フレームアクション終了</li>
</ul>
<p>動的にnewしたMyMc0_asのフレームアクションが開始されるのは、ドキュメントクラスのコンストラクタ終了直後。<br />
(メインタイムラインのフレームアクションの前)</p>
<p>次にメインタイムラインのフレームアクションでnewする場合（1フレーム目に記載）</p>
<ul>
<li>1.mainTimeLine フレームアクション開始</li>
<li>2.mainTimeLine ムービークリップを動的に生成(new MyMc0_as)</li>
<li><strong>3.▲MyMc0_as コンストラクタ開始</strong></li>
<li><strong>4.▲MyMc0_as コンストラクタ終了</strong></li>
<li>5.mainTimeLine ムービークリップを動的に生成終了(new MyMc0_as)</li>
<li>6.mainTimeLine フレームアクション終了</li>
<li>7.MainTimeLineに配置した Mc0_tl  フレームアクション開始</li>
<li>8.MainTimeLineに配置した Mc0_tl  フレームアクション終了</li>
<li>9.Mc0_tlに配置した Mc1_tl  フレームアクション開始</li>
<li>10.Mc0_tlに配置した Mc1_tl  フレームアクション終了</li>
<li><strong>11.★MyMc0_as フレームアクション開始</strong></li>
<li><strong>12.★MyMc0_as フレームアクション終了</strong></li>
</ul>
<p>動的にnewしたMyMc0_asのフレームアクションが開始されるのは、ステージに配置してあるMc0_tlのフレームアクションが全て完了してから。</p>
<p>ここで気をつけるのは、MyMc0_asのフレームアクションにたとえば、</p>
<pre name="code" class="as">

//MyMc0_asのフレームアクション開始
var myProp:Number;
myProp = Math.random();
MyMc0_asのフレームアクション終了
</pre>
<p>と書いて、<br />
メインのタイムラインのフレームアクションで、以下のようにすると</p>
<pre name="code" class="as">

var mc:MovieClip = new MyMc0_as();
trace(mc.myProp);//出力:NaN(Math.random()の代入は実行されていない)
</pre>
<p>期待通りの結果が得られない。</p>
<p>乱数が代入された結果を得るには、メインタイムラインの2フレーム目以降で、mc.myPropを参照すればOK。</p>
<p>一応検証したファイルをアップします。<br />
<a href="http://memo.393.bz/wp-content/uploads/1004231414_asflowtest.zip">1004231414_asflowtest.zip</a><br />
読んでもさっぱり意味がわからない人はどーぞ。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1082/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS]progression4RC departedSceneIdやdestinedSceneIdをif文とかで判定できないってときはここに注意</title>
		<link>http://memo.393.bz/archives/1077</link>
		<comments>http://memo.393.bz/archives/1077#comments</comments>
		<pubDate>Fri, 16 Apr 2010 07:57:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[progression4]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1077</guid>
		<description><![CDATA[progressionを使ううえでの便利プロパティ。
departedSceneId
destinedSceneId
以前のエントリでも書いてるように、出発シーンと、到着シーンを取得できます。
ただし↑はprogress [...]]]></description>
			<content:encoded><![CDATA[<p>progressionを使ううえでの便利プロパティ。<br />
departedSceneId<br />
destinedSceneId<br />
以前の<a href="http://memo.393.bz/archives/444">エントリ</a>でも書いてるように、出発シーンと、到着シーンを取得できます。<br />
ただし↑はprogression3の書き方。<br />
progression4では、progressionインスタンスは無くなり、managerが持ってるプロパティ。</p>
<pre name="code" class="as">

manager.destinedSceneId；
manager.departedSceneId;
</pre>
<p>これを使って、if文の処理をしたいときちょっとはまったのでメモ。<br />
destinedSceneIdとかdepartedSceneIdをtraceすると、<br />
/indexとか、/index/aboutとか、sceneIdを出力してくれます。<br />
なので、戻り値のデータ型はString？と思いきや、実は違います。</p>
<pre name="code" class="as">

trace(manager.departedSceneId)//出力(例)：/index
trace(typeof manager.departedSceneId)//出力：object(stringではない)
</pre>
<p>なので、if文で判定するときは、↓だと上手く判定されません</p>
<pre name="code" class="as">

//manager.departedSceneId == manager.destinedSceneIdは中身がなんであろうと常にtrueとなる
if(manager.departedSceneId == manager.destinedSceneId){
    //処理
}
</pre>
<p>traceしたときに見えるSceneId名で判定させる場合は.toString()をつければOK</p>
<pre name="code" class="as">

//
if(manager.departedSceneId.toString() == manager.destinedSceneId.toString()){
    //処理
}
</pre>
<p>※2010/04/17/16:30追記<br />
コメントにて<a href="http://asdoc.progression.jp/4.0/jp/progression/scenes/SceneId.html#equals%28%29">equals()メソッド</a>というものを教えて頂きました。<br />
こっちの方が簡単ですね。</p>
<pre name="code" class="as">

if(manager.departedSceneId.equals(manager.destinedSceneId)){
	//処理
}
</pre>
<p>※4のBetaまではtoStringなしでも判定してくれてたような気がするけど、RCからは無いとダメみたい。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1077/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
