安らげる部屋-theVisual- 自分勝手なエンターテイメントをあなたに
 --【スポンサードリンク】-- actionscript アクションスクリプト FLASH フラッシュ フラッシュゲーム flash game アフィリエイト HTML ゲーム
無料アクセスカウンターofuda.cc「全世界カウント計画」
--【スポンサードリンク】--
Info-Cash
懸賞・小遣い ちょびリッチ
sushimail.biz


--【スポンサードリンク】--
カスタム検索
presidentmail.net

[ 過去ログ ] - Flash MX 2004 -

non object


--【スポンサードリンク】--

[ ActionScript2.0_No.003 処理の高速化(Math.floor) ] - 更新日:2008年04月30日 -

フラッシュを作ってる人へ豆知識(FLASH MX 2004)

AS2.0の処理をほんのちょっとだけだけど軽くするための豆知識です。

Math.floor()っていう関数がありますよね? 小数点以下を切り捨てる関数なんですけども、私はよくMath.random()と組み合わせて使っています。

mc.gotoAndPlay(Math.floor(Math.random() * mc.totalframes));

なんていう感じでランダムな数値をgotoAndPlayやswicthに入れる時に使ってます。

でもこれをちょっと書き換えると、ほんのちょっとだけ処理を軽くする事ができます。

mc.gotoAndPlay((Math.random() * mc.totalframes) >> 0);

上記のように0ビットシフトさせるんです。
これだけで小数点を切り捨てる事ができます。四捨五入したい場合は+0.5、切り上げたい場合は+1したりすると応用できます。

で、これがどれくらい効果があるのかというと

//(1)Math.floor
var time:Number = getTimer();
var tmp:Number;
for(i=0; i<1000; i++) {
 tmp = Math.floor(Math.random * 100));
}
trace(getTimer() - time);

//(2)0ビットシフト
var time:Number = getTimer();
var tmp:Number;
for(i=0; i<1000; i++) {
 tmp = (Math.random * 100) >> 0;
}
trace(getTimer() - time);

上記の(1)と(2)でforループを抜け出すまでの時間をtraceすると、

(1)平均 24 ms
(2)平均 15 ms

私のCPU(Intel(R) Pentium(R) 4 CPU 2.60GHz Hyper-Threading)では、0ビットシフトの方がMath.floorより平均 9 ミリ秒(0.009秒)早くなりました。
処理効率で考えると約60%早くなります。

まぁMath.floorに処理を奪われてfpsが下がるとかっていう事は滅多にないとは思いますが…
しかし演出が派手で高いfpsのゲームを作っていれば、処理を1ミリ秒でも早くするために心血を注ぐ人って結構いると思います。

私はO型で大雑把な性格なんですが、なぜかこういうチマチマした軽量化が大好きでこういう事ばっかり勉強しています…w

--【スポンサードリンク】--




copyright 2007 yasurageruheya All Rights Reserved.
inserted by FC2 system