参考サイト
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
}
Tags: AS2, AS3, Flash
どうやればいいのだろう。
これだと、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)
Tags: AS3, Flash
偉人たちの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;
Tags: AS3, PV3D
///////////////
//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();
}
Tags: AS2, AS3, Flash, setInterval, Timer
ステージサイズを小さくすると、stage.stageWidth(Height)で正しい値が返ってこないときがある。
例(FlashCS3 AS3)
Flash上でステージサイズを200×200に設定。
ステージ上にダイナミックテキストをtfという名前で配置。
tf.text = String(stage.stageHeight);
上記スクリプトを書いてムービープレビューすると、181と表示される。
ただしパブリッシュした状態ではちゃんと200と表示される。
つまりムービープレビューでの表示がバグっぽいので気にしなくてよし。
Tags: AS2, AS3, Flash