頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


自作のcallLater関数(笑)

またか、、、
AS3でしょっちゅう出会うトラブルです、ホント。
オブジェクトの widthプロパティがオブジェクト作成直後に取得できないってアレです。
慣れるとああ、そうだった、で済みますが最初はどういうこった?どないすんねん?と悩んだものです。

今やってるのがFlexではなくcallLaterもできないから、自分でMyFunction.callLater()ってなstatic関数を作ってしまいました。
↓コードはこんな感じで(読みにくくてごめんなさい)。

public static function callLater(func:Function , spr:Sprite):void {
spr.addEventListener(Event.ENTER_FRAME , efHandler);
var step:uint = 0;
function efHandler(e:Event):void {
if (step >= 1) {
spr.removeEventListener(Event.ENTER_FRAME , efHandler);
func();
}else {
step++;
}
}
}


リスナー設定用にSpriteのオブジェクトを渡し、1フレーム進んだら指定の関数をコールする、ってだけ。

うーん。
なんというか、苦し紛れというか、美しくないというか、、、
そもそも、1フレーム遅れるのでかなり要注意だよ、全く。


Mathってクラス名なのになぜMath.PIって書けるの?

恥ずかしながら、今までどうしてMath.PIなんて書き方ができるのか知りませんでした。
静的変数のお話です。

FLASHで遊ぼう! AS3:39.静的変数

なぜ、AS3でクラス名.プロパティなんて記述ができるか説明できない方はご覧くださいまし、、、めったにいないと思いますが。

やっぱり人のコードを読んで勉強せなあきませんなあ。


メソッドチェーンって何だ?

AS3 でメソッドチェーンしたくなる話 - てっく煮ブログ
上記記事にあるコードや記載されているリンク先の
Functions Returning Functions
にあるコードを見ても、最初何やってるのかさっぱりわかりませんでした。

そもそもAS3で
関数名(引数1)(引数2)・・・;
のようにカッコを続けて書くことができるとは!

実際にコピペして動かしていちいちどのように動作してるのか、確認してしまいましたよ(^^;

なるほど、
関数名(引数1)
で呼び出して帰り値が関数だと(引数2)を渡して処理してくれるのか~!
こんな書き方もあるんだなあ。

あるオブジェクトに対して
object.method1().method2()・・・
ってメソッドを"."で追加していくのは普通に使うけど、関数でも上のような書き方でやってくれるってことか。

でも、繰り返すなら通常forなどのループ内でArrayやVectorのデータを引数にして処理してしまうから、あまり出番がないかな?
もしかしたら、for文より処理が早くできたりするのかも。
きっと誰かが比較して高速化Tipsの検証記事を書いてくれるに違いない、、、(自分でやれって話だな)


Vectorクラスのソート

AS3のVectorクラスで、中身がObject型の場合、ソートするにはどうするの?
というのをまとめておきました。
というのもVectorクラスにはsortOnメソッドがなかったので、、、
FLASHで遊ぼう! AS3:38.Vectorクラスを使う3


AS3で連想配列の中身を得る

最近、またAS3でいろいろやっているので、ネタが増えてきたかな?
特に、高速化しようとVectorなんぞに手を出したりしているわけですが、連想配列となるとどうやらArrayクラスでないとダメなようです。

そのあたりから下の記事を書きました。

自分用のメモみたいなもんです(^^;
FLASHで遊ぼう! AS3:28.連想配列2





Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad