通常、変数にカーソル当ててctrl+shift+1をすると、getterとかsetter作れるショートカット。
このとき変数名に_(アンダーバー)は混ぜない方がいいみたい。
例えば、
var hoge_Hogege:String;
これをショートカットでgetter作ろうとすると、
public function get Hogege(): { return hoge_Hoge; }
このように、予期しない形になります。
ちなみに↓これは
var hoge_Ho:String;
public function get hoge(): { return hoge_Ho; }
こんな感じ。
なので最初からアンダーバーを含まないようにすれば
var hogeHoge:String;
public function get hogeHoge():String { return _hogeHoge; }
こんな感じ。
(そしていつもどおり元の変数にアンダーバーが付与)
(var _hogeHoge:String;)
Tags: AS3, Flash, FlashDevelop
たとえば、ライブラリにMCがあり、それはクラス名Mcでリンケージしてある。
一般的には
var mc:Mc = new Mc();//インスタンス作成
addChild(mc)//表示リストに追加
一行で書くと
var mc:Mc = Mc(addChild(new Mc()));
もしくは
var mc:Mc = addChild(new Mc()) as Mc;
※addChildの返り値はDisplayObjectなので、型変換が必要
2009/03/04追記
※DisplayObjectで問題なければしなくても良い
Tags: AS3, Flash
関数の中に関数を入れた場合(関数クロージャというらしい)、中の関数でのthisの扱いには注意が必要。
例えば。。。
//フレームアクション
function main(){
trace(this);
//mc赤い四角定義
var mc = new MovieClip();
mc.graphics.beginFill(0xFF0000);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();
sub();
//関数クロージャ(たぶん)
function sub(){
trace(this);
addChild(mc);
}
}
main();
上記を実行すると100×100の赤い四角がx:0,y:0の位置に表示される。
ここで注意したいのが、function subの中のaddChild(mc);
これは本来の文法的にはDisplayObjectContainer.addChild(mc)
DisplayObjectContainerが記載されてないから、thisになるのか、
と思うとそうでもない。。。
this.addChild(mc)
これはエラーになります。
finction sub()のthisと、function main()のthisはtrace結果を見ると違うものです。
よって、関数クロージャのaddChild(~)は、thisが省略されてるわけではないってことで。
※この例では”メインのタイムライン”になっているみたい。(フレームアクションなので)
Tags: AS3, Flash
_onload(),_onInit(),_onCastAdded(),_onCastRemoved(),_onGoto()などのoverride系のメソッドの中のaddCommand()は、execute()無しで、自動的に実行されるみたい。
addCommand()はリスト(CommandList?)にコマンドを追加するメソッドで、色んなクラスに入っている。
が、しかし、
CommandListクラスのメソッドのaddCommand()と
SceneObjectクラスのメソッドのaddCommand()とでは
動作の意味が若干違うみたい。(ドキュメントに書いてあることが違うし)
Tags: AS3, Flash, progression, 未解決
loaderInfo.addEventListener( Event.COMPLETE, _complete );
↑これってメインのタイムラインとかドキュメントクラスには書いといた方がいいのかな?
Tags: AS3, Flash, 未解決
まずはドキュメントのサンプルより
パラレルリストの中にパラレルリストを作って実行しているがメリットがわからない・・・
var list:ParallelList = new ParallelList();
list.addCommand(
new ParallelList( null,
new Trace("この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" )
);
list.execute();
コマンド内に書くとexecute();無しでも自動で実行されるのでシンプルな感じ
↓これで上と同じ意味になってるっぽいけど厳密には違うのかしら?
addCommand(
new ParallelList( null,
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" )
)
);
Tags: AS3, Flash, progression, 未解決
gihyoでのプログレッション特集4のサンプルでの疑問点
各シーンの閉じるボタンを表示リストに追加する際に、各シーンに割り当ててるページ(CastSprite)ではなく、SceneObject自体に追加している。
これは、閉じるボタンの戻り先を設定をする際、SceneObjectじゃないと、sceneId:progression.root.sceneIdが使えないから・・・でいいののか?
(CastSpriteはprogressionプロパティをもっていないので)
それでも、CastSpriteに閉じるボタンをおきたいときは、
progression.root.sceneIdをtraceすると中身は”/index”だったので、、、
var sId:SceneId = new SceneId(“/index”);とSceneIdのインスタンスを用意して
sceneId:sId;
としてあげればOKでした。
Tags: AS3, Flash, progression, 未解決
変数 = Math.min(Math.max(値 , 最小値) , 最大値);
例えば、
var randomNum:Number = Math.random()*100;
var maxNum:Number = 50;
var minNum:Number = 10;
var ans:Number = Math.min(Math.max(randomNum, minNum) , maxNum);
ただし、if文で作った方が処理的に速いらしい。
(Mathは遅いそうな)
Tags: AS2, AS3, Flash
並び変えを、任意の関数でルールが作れるようだ。
var myArray:Array = [10,5,2,34];
myArray.sort(compare);
function compare(a,b) {
if (a>b) {
return 1;
} else if (a<b) {
return -1;
} else {
return 0;
}
}
trace(myArray);//出力:2,5,10,34
Tags: AS3, Flash