[AS]EventDispatcherでイベント配信

AsBroadcasterでのイベント配信との使い分けがよくわからんです。
イベントオブジェクトにプロパティがもてるのでより柔軟に使えるってことかしら。

//EventDispatcherにパスを通す
import mx.events.EventDispatcher;

//ブロードキャスターとなるオブジェクトを作成
var casterObj:Object = new Object();
//ブロードキャスター(イベントをdispatchする人)に登録する
EventDispatcher.initialize(casterObj);

//リスナーとなるオブジェクトを作成
var listenerObj:Object = new Object();

//リスナーオブジェクトにメソッド(リスナーメソッド)を定義
listenerObj.eventComp = function(e:Object){
	trace("end");
	//イベントオブジェクトのプロパティを参照できる
	trace("target:"+e.type);//出力:target:eventComp
}

//リスナーオブジェクトとイベントをブロードキャスターのリスナーとして登録
casterObj.addEventListener("eventComp",listenerObj);

//ブロードキャスターがイベント”eventComp”イベントを配信する。
//dispatchEvent(eventObject)
//eventObjectはtypeプロパティにイベント名のStringを持たなければ駄目
casterObj.dispatchEvent({type:"eventComp"});

[AS]AsBroadcasterでイベント配信

AsBroadcasterでイベントを配信できる。
EventDispatcherとの違いがよくわからないのだが・・・
下記のような順番で書いていくこと。

//ブロードキャスターとなるオブジェクトを作成
var casterObj:Object = new Object();
//ブロードキャスターに登録する
AsBroadcaster.initialize(casterObj);

//リスナーとなるオブジェクトを作成
var listenerObj:Object = new Object();

//リスナーオブジェクトにメソッド(リスナーメソッド)を定義
listenerObj.eventComp = function(){
	trace("end");
}
listenerObj.eventComp1 = function(){
	trace("end1");
}


//リスナーオブジェクトをブロードキャスターのリスナーとして登録
casterObj.addListener(listenerObj);

//ブロードキャスターがイベント”eventComp”を配信する。
casterObj.broadcastMessage("eventComp");

//ブロードキャスターがイベント”eventComp”を配信する。
casterObj.broadcastMessage("eventComp1");

[AS]委譲について

委譲という言葉自体よくわからんが、こんなことらしい。

as2での例
ステージに_mcというMCがあり、メインのタイムラインのフレームアクション

_mc.onEnterFrame = xEnterFrame;
function xEnterFrame(){
trace(this)
}
//出力_level0._mc

ここでthisを他のものに変えたい時には以下のように書く

_mc.onEnterFrame = Delegate.create(this.xEnterFrame);
function xEnterFrame(){
trace(this)
}
//出力_level0

Delegate.create(第一引数.第二引数);
第一引数でスコープオブジェクトを指定できる。

[AS]オブジェクトの変数名をfor文で回せるの?

どうやればいいのだろう。
これだと、nullになっちゃう。
配列につっこんで管理するしかないのか?

for(var i:uint = 0; i<3;i++){
	var sh0:Sprite;
	var sh1:Sprite;
	var sh2:Sprite;
	
	var sp:Shape = "sh"+i  as Shape;
	sp = new Shape();
	var spg = sp.graphics;
	
	spg.lineStyle(5,0xff0000,1,true);
	spg.moveTo(0,0);
	spg.curveTo(100,100,i*50,200+i*10);
	spg.endFill();
	
	addChild(sp);
}
trace(sh1);//nullになる

///////////////////////////////////////
//12/5 追記
//根本的に書き方がおかしかった
//これなら参照できるけど、sh0,sh1,sh2の定義がfor文で重複してる。。。
//もう少しマシな書き方がありそう・・・

for(var i:uint = 0; i<3;i++){
	var sh1:Shape;
	var sh2:Shape;
	var sh0:Shape;
	
	var sp:Shape = new Shape();
	this["sh"+i] = sp
	var spg = sp.graphics;
	
	spg.lineStyle(5,0xff0000,1,true);
	spg.moveTo(0,0);
	spg.curveTo(100,100,i*50,200+i*10);
	spg.endFill();
	
	addChild(sp);
}
trace(sh1)

[AS]PV3Dのオブジェクトの上に2DのMovieCLipをのっける

偉人たちのTwitterの会話をメモ・・・
>PV3Dのオブジェクトのピッタリ狙った位置とサイズに2Dのムービークリップを重ねる技術
>Camera3D の focus * zoom がちょうどスクリーン座標と 3D 座標が一致する距離
>DisplayObject3D に screen てプロパティ。screen 座標。
>逆にDisplayObjectをScreen座標にあわせられます。
>autoCalcScreenCoords を true にしとかないと計算してくれいないぽい。

2009/5/31追記
具体的には、こんな設定でちょうど縦横100%で表示されるようす。

camera = new Camera3D();
camera.z = -1000;
camera.focus = 1000;
camera.zoom = 1;

[EV]f-siteセミナー 2008/11/15

f-site セミナーメモ
2008/11/15

◆◆progressionコンポーネントベース
nium先生

progressionとは
ページの切り替えを簡単に効率的にできるようにしたもの。


1.複雑な画面の切り替えが簡単にできる。

2.ディープリンク、コンテキストメニュー、キーボードショートカットに自動対応。
(F5キーで更新など)
右クリック、新規ウィンドウで開くなど

3.flaからHTMLまで自動で書き出される。
FLASHerはHTMLを触りたくない!

4.スクリプトを全く書かずに製作することができる。
(コンポーネントベースでの製作パターン)

5.OOP的に完全準拠したクラスを使って製作することができる。
(クラスベースでの製作パターン)
表示リストに準拠した設計

◆メリット
1.楽しい部分だけ作れる!

2.作りこみの時間を増やせる。

3.ユーザービリティが。。。的なことをいわれなくなる。

◆応用編
1.コンポーネントベース+コマンドで外部ファイルを読み込む
2.クラスベース+コンポーネントでのアニメーション。

◆1
1.空のSWFを用意(スクリプトのみの記載)
2.シーンエディターで1.の空のSWFを設定する。
(スクリプトが読まれる)
3.そのスクリプトについて

LoadChild、UnloadChildコマンド(外部ファイルの読み込み、削除)
基本クラスにCastMovieClipクラスを継承したクラスでonCastAddedのメソッド

◆2.
サンプルみてね。

◆お知らせ
12/4勉強会
3.1、FlashCS4の発売日にリリース。

*************************************************

◆◆やさしいAS3入門
森巧尚

1.クラスが難しそう
クラスって何?おいしいの?

いやいや、
外部ASでもタイムラインだけでも作れる方法があります。

少し固めにAS2を書くくらいの感覚でOK。
カスタムクラスは自分で作らなくてもOK
ボタンとかムービークリップもクラスです。

「タイムラインで作る方法」とは
フレームアクションを書いていく方法。
importを書かなくてもFLASHの機能は使える。

苦手意識を消す方法w
addEventListener→にと変換すると日本語っぽくなる。

ドキュメントクラスをタイムラインに書く方法

*************************************************

◆◆ADOBEからの最新情報
西村さん

1.CS4デモ(新機能)

◆オブジェクトべースのアニメーション
1.フレームベースからオブジェクトベースのアニメーションに。
ちょっと簡単になった?
ドラッグでフレームの伸ばせる。
軌跡がベジェ曲線で編集可能
キーフレーム打たなくてもいい?
プロパティ値ないで四則演算可能

2.モーションエディタの追加
微調整が可能って感じ?

3.モーションをプリセット化できる。
保存と、読み出し。

4.オブジェクトの置き換えが簡単になった。
アニメ情報と、図形情報が別々になっている感じ。

5.以前のやり方も可能。
クラシックトゥイーンを選択

◆3dの表現
3D回転ツールでぐりんぐりんとまわせる。
3D変換ツールでカメラ、消失点の設定もできる。

◆ボーン(関節的な表現)
アーマチャーレイヤでアニメーションでもOK
アイケーって何?

◆FLEXとの連携もよくなった
クラスパスとか、基本クラスの設定でできる感じみたい

◆Adobemediaエンコーダ
AEからもXFLファイル形式で読み込み可能
いずれ、FLAもXFLになる予定。

◆ライブラリ
検索可能、
まとめて変更とかもOK

◆◆fp10での行列とベクトル
野中ふみお

Vectorクラス
ARRAYクラスみたいなの
>似てる点
配列のようなプロパティとメソッドがある。
>違う点
エレメントに対してデータ型を指定
インデックスは必ず連番

使い方
インスタンスを作る
→最初にエレメントの型を指定する必要がある。
※書き方はググる。

◆利点。
型指定ができるので、アクセスが速い。
配列よりも速い!

◆つかわざるを得ない状況もある
drawTriangleとか

◆行列について
変換行列
正方行列

行列の乗算順番を変えると結果が変わる。
正方行列なら、何度でも掛けれる。
→だからフィルタもたくさんかけれる。

変換行列

matrix3Dでは
prependとappendの違いについて

変換行列の数学的な取り扱い
→野中サイト(ベクターとか)
→adobeデベロップセンタ

[AS]フレームアクションを使った時間の調整

///////////////
//AS2の場合

stop();
var waitTime:Number = 500;
//待ち時間関数
function WaitTime() {
	clearInterval( WaitTimeId );
	play();
}
//waitTime秒間停止させる
WaitTimeId = setInterval(WaitTime, waitTime);

///////////////
//AS3の場合

stop();
var waitTime:Number = 1000;
var wt:Timer = new Timer(waitTime);
wt.addEventListener(TimerEvent.TIMER, WaitTime);
wt.start();
//待ち時間関数
function WaitTime(e:TimerEvent):void {
	play();
}

[AS]ステージサイズの取得について

ステージサイズを小さくすると、stage.stageWidth(Height)で正しい値が返ってこないときがある。

例(FlashCS3 AS3)
Flash上でステージサイズを200×200に設定。
ステージ上にダイナミックテキストをtfという名前で配置。

tf.text = String(stage.stageHeight);

上記スクリプトを書いてムービープレビューすると、181と表示される。
ただしパブリッシュした状態ではちゃんと200と表示される。

つまりムービープレビューでの表示がバグっぽいので気にしなくてよし。