AS3ではMath.floorよりintのほうが速い

Adobeデベロッパーセンターで野中さんによるActionScript 3.0におけるパフォーマンス向上のヒント が掲載されています。 いろいろとかなり有用なテクニックをまとめられていますので、いつもながらかなり勉強になります。

個人的に知らなかったというか一番びっくりしたのが、

もうひとつ、切捨ての処理を紹介しておきます。通常は、切捨てはMath.floor()メソッドを使って行います。しかし、数値を整数に変換するグローバル関数int()が、小数点以下の数値を同じように切捨てます[*23]。そして、int()関数の方が、Math.floor()メソッドよりも処理は速いです。

という事! 今までの僕だと急にどうしてもすごろくをしたいのに、たまたまサイコロを持ち歩いていなかった場合などは

Math.floor(Math.random()*6);

としていたのですが、今度からは

int(Math.random()*6);

としたほうがよりスピーディーなすごろく展開が期待できそうですね!
今まで当たり前に書いてたような定型化されたような書式でもAS3だと再考してみる余地があったりして本当面白いです。

ちなみにおまけですが、ウチでは簡単なスクリプトなどはデザイナーがささっと書いてくれたりすることも多いですが、例えば星が瞬く表現など同じシンボルのインスタンスを使いまわすけど開始フレームをランダムに再生させたい、なんて場合はシンボルの最初のタイムラインにこんな風に書くと良いですね。

こんなやつ

var f:Boolean;
if(!f){
	gotoAndPlay(int(Math.random() * totalFrames));
	f = true;
}

flaファイルはZIPで固めてこちらに置きましたんでよかったら参考にどうぞ。
サンプル集とかだと意外とこういう簡単なのなかなか無くって、けっこうややこしいことをサンプルから削り削りやってたりして大変ですよね。

注意

本当は

var f:Boolean;
if(!f){
	gotoAndPlay(int(Math.random() * (totalFrames - 1)));
	f = true;
}

と+1書くのが一番良いです。
まあややこしい説明抜きでぱっと見でも簡単に動く奴で便利に使ってもらって、そっから先「何故そうなるのか」とか突っ込んだところが知りたかったら専門の勉強したら良いだけなので、Flashがフレームゼロにgotoしても正しく動く以上、「ややこしくないActionScript」の書き方もそれはそれで楽しくてアリだな、と個人的には思います。
Math.floorとintの速度差の記事の落ちがそれって矛盾してそうですが、コーダー向けActionScriptとデザイナー向け「アクション」は切り離して考えるのが一番面白いかと。

AS3ではMath.floorよりintのほうが速い」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。