萩萩日記

世界に5人くらい存在するかもしれない僕のファンとドッペルゲンガーに送る日記

Flashとの戦い(フレームレート編)

いや、他に何編があるかわからないですが。

で、こないだ作ってたのはパズルっぽいゲームだったこともあり、あまりフレームレート(fps)は気にならなかったんですよ。ブラウザで見るとちょっと実行速度が遅くなってたけど、ま、そんなもんかと。けど、いま別のアクションっぽいゲームを作っていて、そうなるとフレームレートとかって大事になってくるんで、少し調べてみたのです。そしたら、なんと、Flashというものは、ブラウザで見ると遅くなるもののようじゃありませんか。えー?そうなの?んだかなあ・・・。

というわけで上記サイトにあったように、


を入れてみたらたしかに改善されたものの、これだとキーボード入力を受け付けなくなるんで(英数字だけ入力できたりする場合もあった)、実際は使えない。

で、なんだろうなあと思っていろいろ調べたら、純粋に、ちょっと遅くなるだけで、上限があるわけじゃないのね。あと、Macintoshの場合、Windowsよりも遅くなるなり方(遅くなり度)が多かった。ただ、Macintosh(って書くの面倒になったので以下マック)の場合、他にもいろいろウインドーを開いてるとどんどん遅くなるようで、これはなんですかね、アクアでしたっけ、あいつが悪いんじゃないかと。だいたいね、マックは、僕がCentris買ったあとぐらいから、どんどん安くなっていってですねあなた、僕は少々おかんむりですよ。

まあ、さておき、せっかくなんで、僕がざっと調べた、設定fpsと実効fpsの差を書いておきます。ちなみに、あくまでも手元のFlashがという話で、あと特に網羅したわけでもないので。マックの場合、後ろでいろいろ開いてるかによって、結構幅があります。

OS 設定fps 実効fps
Windows XP 16 14.5
- 18 16
- 24 20
- 28 23
- 30 24
マック 16 10〜14
- 18 11〜16
- 24 18〜20
- 26 22
- 28 22.5
- 30 19〜23

そんで、フレームアクションでいろいろやるんじゃなくて、setIntervalを使って、設定したfpsに縛られずに自由にアニメさせる方法ってのもあるようで、これはこれでFlash的にどうなんだという気持ちもあるものの、一応やってみました。みましたが(松尾スズキ風←たぶん伝わらない)、やっぱダメ。setIntervalならブラウザでも遅くならないしマックでも同じスピード、ってのが自分的には望んだ結果だったんだけどね。

試しに、setInterval(test_func,100)みたいな感じで、100ミリ秒ごとに関数が呼ばれるようにして、50回関数が呼ばれるまでに何ミリ秒かかるか調べたのが以下。5回実行した平均です。

Flashの実行環境 平均値 平均値をfpsにしたもの
理論値 5000 10
IDE(っていうのか?)@Windows XP 6519 7.67
Firefox@Windows XP 6558 7.62
IE@Windows XP 7029 7.11
Firefox@マック 7255 6.89
Safari@マック 8075 6.19
Firefox@Gentoo Linux 6680 7.49

あれ?これぐらいのバラつきなら大丈夫?と思うでしょ。でもさあ、なんか知らんのだけど、手元の環境(IDE。っていうのか知らんけど、Flashムービーを作るソフト上のこと)だと、41ミリ秒ごとに呼び出すか42ミリ秒ごとに呼び出すかで、全然fpsが変わっちゃうんだよね・・・。謎だ。ただ、ブラウザで見ると、41と42であまり差がなかったから、そのあたりをターゲットに、再度ベンチマーク取ってみるかのう。

と、いろいろ書いてみたおかげで問題点がはっきりしてきたような気がします。ありがとうございました。