Home > ActionScript > [ActionScript]Flashの不思議な軽さ

[ActionScript]Flashの不思議な軽さ

「魔法のきのきの」のActionScript版への移植とソースコードの公開が完了しました。3つの言語のソースコードを見比べてみると、なかなか面白いのではないかと思います(クラスの概念を持たないC言語版をベースにしているので、Java版とAS版は1クラスにほとんどの処理が詰め込まれていて少々読みにくいですが……)。

JavaからActionScriptへ移植する工程はメモを取ってあるので、こちらもいずれ整理して公開する予定です。

ところでActionScript版でも実行中の負荷を簡単に調べてみましたが、記憶の通りかなり軽いことがわかりました。前回の記事と比べてみるとC言語版・Java版との差に驚かれると思います。

kinoas02 
ロード直後はたまに70%を超える。

kinoas01
それ以降はほぼ10%未満。

しかしそれには裏があって、Flashはちょっと負荷が高くなるとすぐにタイマーイベントをスキップしてしまうようなのです。20fpsにしては動きがぎこちないと思って調べてみたら、10fps前後まで落ちていました。おそらくWebページに埋め込む仕様上、ブラウザに過度の負荷を与えないように設計されているのでしょう。

とはいえ、いくら何でもCore2Duo&FlashPlayer 10で20fpsが出ないはずはないので、色々試してみた結果、「this.stage.frameRate = 24;(24fps)」とし、GameCommunicator.as内のタイマーのスケジュールを「41ミリ秒(24fps相当)」にすると、20~22fps出るようになりました。負荷はほとんど変わらないのに格段に滑らかです。

 kinoas03
修正版。fpsが右下に表示されるようにした。「:」の右はframeRateが返す値、左はgetTimer関数で調べた実測値。

結論としては、「Flex3SDKで作ったswfファイルは24fpsで最適動作するようチューニングされている」ということ(そういえばFlexの推奨値でした)、そして「Timerの間隔はアテにならないということ」でしょうか。アテにならないのでActionScript版では1ループ毎に経過秒数を計り、それに合わせてキノコの移動量が変わるようにしています(C言語版には同様の仕組みがありますが、Java版は50ミリ秒決め打ちで動かしています)。

ちょっと納得がいかないのですが、Java版で負荷軽減に苦労させられたことを思えば、軽いのはやはりいいですね。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://i-libro.net/wpmu/blog/archives/349/trackback
Listed below are links to weblogs that reference
[ActionScript]Flashの不思議な軽さ from わくわくプログラミング自習室 Blogs

Home > ActionScript > [ActionScript]Flashの不思議な軽さ

Amazonリンク

Return to page top