[AS]if文での戻り値のないreturn

functionから抜ける

function init() {
	var a:Number=100;
	trace(a);//出力される:100
	if (a==100) {
		return;
	}
	trace(a);//出力されない
}
init();

[Fl]CS3とCS4でラジオボタンのフォーカスルールが違う?

コンポーネントのラジオボタンで気づいたこと。
まずステージに3個以上ラジオボタンを配置する。
TABキーでラジオボタンにフォーカスを当てることができる。
このときカーソルキーでラジオボタンのフォーカスを変えることができる。
(デフォルトではラジオボタンのプロパティのgroupNameはRadioButtonGroupになっているため)
カーソルの右を押して、フォーカスがあたる順番はステージに配置した順番になる。

ここまではCS3もCS4も一緒。

ではラジオボタンにインスタンス名とかラベル名をつけたらどうだろう。
カーソルの順番が変わるのだ。
具体的にどう設定したらどう変わるかというルールがよくわからんが、インスタンス名とかラベル名をつけると順番が変わった。

CS4はではインスタンス名とかラベル名をつけてもかわらなかったようだ。
これはこれでスッキリしていていい。

だけど、同じflaファイルでもCS3でパブリッシュしたときとCS4でパブリッシュしたときで順番が変わる可能性があるってことでした。
(ずばりそのような状況に陥ったでした・・・)
これは意外と気づかないから危険だと思う。

ちなみにWin環境のみで検証。(Mac無いので)
Macではまた違ったことが起きそうな気もしないでもないです。

[JS]cookieについて

設定の仕方はこんな感じ。

document.cookie = "expires=○○○;△△△=□□□";

○○○が有効期限
これを設定しないと、ブラウザを閉じた時点で削除される。
△△△と□□□は任意の値を設定可能

[AS]MCにマスクをかけるときの順番。

いつも、どっちがどっちかわからなくなるのでメモ

まずAS3
ステージ上に、
インスタンス名:切り抜かれるMC(青い長方形)
インスタンス名:切り抜きの型となるMC(赤い三角)
二つのインスタンスを重ねた状態で、

切り抜かれるMC.mask = 切り抜きの型となるMC;

これで、青い三角ができあがる、と。

AS2だと

切り抜かれるMC.setMask(切り抜きの型となるMC);

切り抜かれるMCが常に最初と覚えておくことにしよう。

あとインスタンス名とかって全角の日本語でもOKなんですよねぇ。
AdobeMAXで城戸さんのセッションでやっててこういう使い方もありかと思いました。

[AS]SharedObjectについて

ユーザーのPCに変数情報等を保存できる。
Flash版のCokkieみたいなものらしい。
(そもそもCookieをよくわかっていないが)

何ができるかといったら、swfファイル間で同じ変数情報を共有可能。

使い方、owner.flaをつくりのそのフレームアクションに、

// 共有オブジェクトを作成する
var so:SharedObject =SharedObject.getLocal("MyData","/");
//containerBox0という箱を定義して値を設定
so.data.containerBox0="test0";
//ローカルにファイル(MyData.sol)を保存する。
var str = so.flush();

つづいて、user.flaを作ってそのフレームアクションに、

var so:SharedObject=null;
so=SharedObject.getLocal("MyData","/");
var tf:TextField = new TextField();
addChild(tf);
tf.text=String(so.data.containerBox0);

owner.flaをパブリッシュすると、MyData.solが保存される。
保存場所は上記スクリプトの場合は、
C:\Documents and Settings\(ユーザーID)\Application Data\Macromedia\Flash Player\#SharedObjects\NFWUQ76F\(ドメイン名)
もしくは
C:\Documents and Settings\(ユーザーID)\Application Data\Macromedia\Flash Player\(ドメイン名)
といった感じになるようだ。
参照サイト
ちなみにサーバーにあげないでローカルで試してるときは、(ドメイン名)はlocalhostになる。
ファイルができたことを確認して、user.flaをパブリッシュすると、text0が表示される。

ここで少し注意が必要でした。

owner→userの順でパブリッシュすると期待通りの動きですが、
user→owner→userの順でパブリッシュすると、MyData.solが削除されてしまいます。
理由はちゃんと理解してませんが。。。
多分先に作ったSharedObjectインスタンスに情報が入ってないから、なんちゃらかんちゃらな感じ。
なので情報が入ってるか入ってないかを判定して、入ってなかったら、その場でSharedObjectインスタンスを破棄するような処理が必要。

というわけでuser.flaを以下のように変更するとOKでした。

var so:SharedObject=null;
so=SharedObject.getLocal("MyData","/");
if (so.data.containerBox0==null) {
	so.clear();
	so=null;
} else {
	var tf:TextField = new TextField();
	addChild(tf);
	tf.text=String(so.data.containerBox0);
}

ファイル保存の際はエラー処理書いておかないとまずいですね。。。

[AS]removeChild()でガベージコレクション(GC)対象となる。

例えば、フレームアクションで、

var sp:Sprite = new Sprite();
this.addChild(sp);
removeChild(sp);
sp = null;

スプライトを作って、
メインのタイムラインに追加して、
メインのタイムラインから削除して、
スプライトの参照も削除

当然これで、spはGC対象となる。
でもこの場合ではsp=nullは特に要らないみたい。

var sp:Sprite = new Sprite();
this.addChild(sp);
removeChild(sp);

この場合は、これでもspはGCの対象となるようす。
removeChild()した時点で、GC対象となっている。

removeChildについてのドキュメントより、

DisplayObjectContainer インスタンスの子リストから指定の child DisplayObject インスタンスを削除します。
削除された子の parent プロパティは null に設定されます。その子に対する参照が存在しない場合、そのオブジェクトはガベージコレクションによって収集されます。

参考サイト:
FlashPlayer9のガベージコレクタのメモリ解放の考察

DisplayObjectじゃない(addChildしてない)変数をGC対象とするときは○○=nullを使って参照を切ればいいってことなのかな。

[WP]wordpressのプラグインsyntaxhighlighterでactionscript3.0を表示させる

意外とはまってしまったのでメモ。

この方のエントリーで99%解決してるのですが。。。
[WordPress]SyntaxHighlighterのActionScript対応

SyntaxHighlighterというプラグインが世の中にたくさんありすぎてはまりました。

上の方のエントリーで扱われているのは、
wordpress.orgのやつです。
これを使いましょう。

他には、
こんなのや、こんなのもあります。
この二つだと上の方が説明されてるAS3への拡張手順が適用できません。
(syntaxhighlighter.phpというファイルが存在しない)
PHPがわかる人は拡張できると思いますが、私には無理でした・・・