[AS]変数宣言と関数定義はスクリプトが実行される前に初期化される

mcを入れ子にした状態でも可能。
たとえば子のMCのフレームアクションで定義した変数や関数にも親MCのフレームアクションでアクセスするもOK。

test();
function test(){
trace("i="+i);//出力:i=0(intの初期値は0)
}
var i:int;

※変数の初期化はできるけど代入はできないみたい。

test();
function test(){
trace("i="+i);//出力:i=0(intの初期値は0)
}
var i:int = 5;//5を代入しても、traceでは0となる。

[AS]不必要なMCを消すときには(メモリから解放)

var mc:MovieClip = new MovieClip();
this.addChild(mc);

//removeChildして、nullを代入すること
this.removeChild(mc);
mc= null;

[AS]if文の条件式の中には代入式も書ける

例えば、

//フレームアクション
var n:Boolean = true;
stage.addEventListener(MouseEvent.CLICK, xClick);
function xClick(e:MouseEvent):void {
n = !n;
	if (n) {
		trace("true:"+n);
	} else {
		trace("false:"+n);
	}
}

↑を↓のように書いても同じこと。

var n:Boolean = true;
stage.addEventListener(MouseEvent.CLICK, xClick);
function xClick(e:MouseEvent):void {
	if (n = !n) {
		trace("true:"+n);
	} else {
		trace("false:"+n);
	}
}

[EV]Progression勉強会12/4メモ

※走り書き程度の個人用メモです。
※理解せず書いてるところもありますので嘘書いてるかもしれません。。。

◆アドビからの最新情報
スピーカー:ADOBE西村さん

・FLASH CS4の説明
1)XFL形式のについて
xmlベースのFLAフォーマット
他のアプリとの連携強化
CS5でのスタンダードになる予定

2)AEからFlへの読み込み
メインのタイムラインに作られる。
ムービーの編集はタイムライン伸ばすとかくらいならOK。

3)IDからFlの読み込み
キーフレームに一枚ずつ入る感じ?

4)FLEXとの連携。
flashで作ったmcにflex用のクラスパスを書いてflexのプロジェクトに書き出し(swc)
flex→flashはできないっぽい。

>アベさんからのピンポイント質問
5)DwでのPsのスマートオブジェクトの管理状態について
Psとリンクした画像をDwに読み込める。
psd単位でしか扱えないっぽい。
(スライスオブジェクト単位だと便利になるのに)

(おまけ:ボクの疑問も聞いてみた)
6)CS4からのオブジェクトベースのタイムラインは過去のFPにも対応するのか?
→過去ver(9とか8)でも対応可能
※ただし、ボーン機能や、3D機能はFP10書き出しでのみOK。

◆AIRでProgression
northprint:narayamaさん

gihyo(毎週火曜日更新)でProgression解説記事連載中

1.AIR開発ができるように準備
2.FDのプロジェクトのプロパティ→Compileroptions→SWC Include Librariesをなんちゃらするとコードヒントが出て便利
3.開発にはシーンをどう使うか、これがポイント!
4.作ったのはRSSリーダー(webデザ11月号を参考)
5.履歴の移動にシーンを利用
6.処理の記述をカスタムコマンドで管理
→ローカルファイルを読み込むカスタムコマンド
→ローカルファイルに保存するカスタムコマンド
7.カスタムコマンドはテンプレベースで作りましょう。
8.ツールチップ機能を活用して簡単なインタラクティブ要素を追加。
9.index-app.xmlを編集すればいろいろできます。
10.カスタムコマンドをみんなで作って共有しようよ!

◆コンポーネントベースで頑張ったサイト
リンクアット・ジャパン:そうけ島さん(fumix)

作成のポイント
xml書いてサイトの構成を作る
キャストをシンボルで書き出すのは便利
(雛形(MCシンボル)が自動で一気に作成される)
InOutMovieコンポーネントが超重要
ラベルin、stop、outを追加
in→stop
stop→out
外部swfを読み込みたいときにもこれでイベントのタイミングをとる。
キャストの1フレーム目にはstop書いておいたほうがいいよ。(暴走防止)
一番大変だったのは漢字へのルビ振り。

◆progressionの拡張機能
flabaka:あつのすけさん

1)コンポーネントベースのEffectviewerを改造する
→コード吐き出し機能もつける
→クラスベースでも使えるようにする
できたもの:TransitionGenerator
・使い方
1]コンポーネント
エフェクトを選択、良ければステージに配置ボタンを押すと勝手に配置される。
便利そう!
2]クラスベース
※コマンド内に[]をつけるとパラレルリストになる。デフォルトはシリアルリスト
ターゲットを設定して反映させる。(メインタイムラインならthis)
クリップボードにコピー貼り付けでOk
mxiを作ってextensionmanagerにて拡張させるとmxpファイルが簡単にできるよ。

2)動的にシーンを作成する方法
PRMLLoaderを使う
一気に全シーンを作成したいときに便利そう。

PRMLLoaderの作り方
シーンエディターが簡単そう。
シーンエディターパネルでPRMLLoader作成を選択
注意点
addSceneFromXMLを使う場合は子だけで良いので親は削除する。

◆progressionの広め方
KAYAC:dokeさん

どんな人がつかってるの?
初、中、上
FLASHって製作物の種類もいろいろあるでしょ。
どれにあうかを考えて。

progressionの中身について、
command:単品で使えます
cast:多分単品でも使えます。
scene:単品で動いても意味ないです。

コンポーネント
コマンド
easycasting

↓これらがライブラリ的に増えていくと盛り上がりそう。
(初級者(タイムライン派)でも簡単にカッコよくという認識をもっと増やす)
カスタムコマンド
カスタムエフェクト
カスタムキャスト
カスタムコンポーネント
※slidesライブラリはprogressionで作られてます。

◆Progression3.1のデモ
nium:アベさん

fp10、air1.5を対応させました。
API化しました(バッチファイルでプロジェクトをつくるみたいなことらしい)
jsflの内容を編集するといろいろできるよ。
swcに対応したよ(CS4)→swc使うとプロジェクト作成が5倍速い!
アップデート時にバックアップも取れるようになった。
classベース→componentベースに変更もできたりする!(裏技的)
アップデート中に停電してもバックアップされているから安心だよ!

[AS][?→ok]スコープがよくわからない・・・

スコープがあってないと思うのだけど理屈がよくわからない・・・

例えば、こんなカスタムイベントはOK
(ステージに_mc1インスタンスを配置)

//////////
//フレームアクション

import mx.events.EventDispatcher;
import mx.utils.Delegate;

var frog1:Object = new Object();
EventDispatcher.initialize(frog1);
	function passPoint(eventObj:Object):Void {
		trace(eventObj.child);
	}
	frog1.addEventListener("passPoint",this);

_mc1.onRelease = function() {
	trace("on");
	trace("this;"+this);
	var testObj:test2 = new test2(frog1);
};

//////////
//カスタムクラス(test2.as)

class test2 {
	var childID = 300;
	var frog1:Object;
	public function test2(frog1) {
		this.frog1 = frog1;
		tat();
	}
	function tat() {
		frog1.dispatchEvent({type:"passPoint", child:childID});
	}	
}

//////////
でもこれを以下のようにフレームアクションを変えるとイベントが受信できない。

//////////

import mx.events.EventDispatcher;
import mx.utils.Delegate;

var frog1:Object = new Object();
EventDispatcher.initialize(frog1);

_mc1.onRollOver = Delegate.create(this, testOver);
function testOver() {
	trace("this:"+this);
	function passPoint(eventObj:Object):Void {
		trace(eventObj.child);
	}
	frog1.addEventListener("passPoint",this);
};

_mc1.onRelease = function() {
	trace("on");
	trace("this;"+this);
	var testObj:test2 = new test2(frog1);
};

function testOverは委譲しているので、this参照は_lovel0になっているのに。
・・・何か別の問題があるのだろうか?

/////////////////////////////////////
12/5 追記
理解しました。
function内にfunctionが入っているとそれはローカル変数的なfunctionになるのだそう。
(passPointがtestOverに含まれてしまっているということ)
this参照が_lovel0でもグローバル的な関数にはなりえないってことらしい。

つまり・・・
////////////////////////
//これはtraceできないけど。。。

var test:Function;
function main(){
	//test = test();
	function test(){
		trace("a");
	};
}
main();
test();

////////////////////////
//これならできる、みたいな

var test:Function;
function main(){
	test = test();
	function test(){
		trace("a");
	};
}
main();
test();

[AS]委譲する際に引数を持たせる方法

参考サイト
http://katapad.com/wp/2008/05/25/study_as2_delegate_create/

Delegate.asを以下のように書き換える。

static function createWithArgs(obj:Object, func:Function, args:Array):Function//args:Arrayを追加
{
	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;
}

配列で引数を渡せるみたい。
ただし、配列として色んな値を格納して、それを取り出すなんてことはできないみたい。

例えば、ステージに_mcというインスタンスをおいた状態で、

import mx.utils.Delegate;
var tstArray:Array = new Array();
tstArray.push(100);
tstArray.push(200);
_mc.onRollOver =  Delegate.create(this, onRollOverTest,tstArray);
function onRollOverTest(x){
trace("delegate+"+x);//出力:100
}

これでは値はunderfinedになってしまった。

import mx.utils.Delegate;
var tstArray:Array = new Array();
tstArray.push(100);
tstArray.push(200);
_mc.onRollOver =  Delegate.create(this, onRollOverTest,tstArray[0]);
function onRollOverTest(x){
trace("delegate+"+x);//出力:100
}