ささきち流 Suzuka & ParaDraw 講座
Suzuka & ParaDraw
TOP
PROFILE
ActionScript Editor
LINK
BBS


フリーソフト Suzuka & ParaDraw で Flash な生活を楽しんじゃおうというサイトです。
簡易fps(フレームレート)測定器 サンプル&作成方法解説

 

 


サンプルダウンロード
PDRファイル・CSFファイル在中
「framerate.zip」 7.18 KB (7,355 バイト)



簡易fps(フレームレート)測定器 作成方法解説

単フレームの ActionScript だけで作っているので,ActionScript のコピペでけで作成できます。
Suzuka と Adobe Flash(MX以上)用の ActionScript素材 のようなものです。
このページの簡易fps(フレームレート)測定器を作るのには PadaDraw は必要ありません。
また,スプライト(ムービークリップ)やボタンやテキストフィールドを作成する作業も全く要りません。

このページの本題は,サンプルの左上に表示されているドラッグ可能なフレームレートを見るための「フレームレート測定器」です。
しかし,変動しない数字を見るだけでは面白くないので,サンプルではオマケとしてアニメーションを入れています。
Flash Player 9 アイコンの絵を適当に動かしてみただけの,単なる素朴なタイムラインアニメーションです。
サンプルは, PraDraw Ver 0.34a で作成した絵を,Suzuka Ver 0.7.4.1[リッチエディット版] で動作させています。

いつものサンプルはだいたい 15fps で作成していますが,今回のサンプルでのフレームレートは 20fps にしています。
フレームレートは変動すると思いますし,マシンのスペックによっては動作が速い部分と遅い部分が出てくるのではないかと思います。
(ハイスペックなマシーンだとフレームレートは全く変化しないかもしれませんが。)
サンプル Flash は,ちょうど400フレーム,理想状態で20秒のタイムラインアニメーションがループ再生されるものです。
400フレームあっても,タイムラインを使ったアニメーションであっても,たった 8.74 KB (8,950 バイト) のファイル容量の SWF です。
ファイル容量的に軽いだけですが,ドロー画+Flash はホント軽くて良いですね。

アニメーションなどの話はどうでも良くて,「フレームレート測定器」のスクリプトですが,
フレーム1 に次のように書いています。

/*-----------------------------------------------------*/
/*
コピペで 『フレームレート測定器』
_root のアクションレイヤー フレーム1 などにコピペするだけで使用可能。
処理が重い軽いやフレームレートの変動などの確認に利用できます。
ただしCPU はこの測定器の動作にも使われるため正確とは言えません。
「観測する行為自体が対象に影響を与える」〜京極夏彦「姑獲鳥の夏」より
〜↓変造・改良などは自由にしてください↓〜
*/
// ◎ フレームレート表示用のテキストフィールドの作成
// _root の深度1000に インスタンス名 framerate のMCを作成
_root.createEmptyMovieClip("framerate", 1000);
// _root.framerate のパスを変数化
frm = _root.framerate;
// MC framerate にテキストフィールド counter を作成
frm.createTextField("counter", 0, 10, 10, 60, 20);
frm.counter.border = true;
frm.counter.borderColor = 0xA0A0A0;
frm.counter.background = true;
frm.counter.backgroundColor = 0xDDDDDD;
// MC framerate にテキストフィールド tanni を作成
frm.createTextField("tanni", 1, 50, 10, 20, 20);
frm.tanni.text = "fps";
//
//アナログ表示枠の作成
frm.createEmptyMovieClip("waku", 2);
frm.waku.beginFill(0xDDDDDD, 100);
frm.waku.lineStyle(1, 0xA0A0A0, 100);
frm.waku.moveTo(9, 35);
frm.waku.lineTo(9, 40);
frm.waku.lineTo(20, 40);
frm.waku.lineTo(20, 35);
frm.waku.lineTo(20, 40);
frm.waku.lineTo(30, 40);
frm.waku.lineTo(30, 35);
frm.waku.lineTo(30, 40);
frm.waku.lineTo(40, 40);
frm.waku.lineTo(40, 35);
frm.waku.lineTo(40, 40);
frm.waku.lineTo(50, 40);
frm.waku.lineTo(50, 35);
frm.waku.lineTo(50, 40);
frm.waku.lineTo(60, 40);
frm.waku.lineTo(60, 35);
frm.waku.lineTo(60, 40);
frm.waku.lineTo(71, 40);
frm.waku.lineTo(71, 35);
frm.waku.lineTo(71, 50);
frm.waku.lineTo(9, 50);
frm.waku.lineTo(9, 35);
triangle_mc.endFill();
//
//アナログバーの作成
frm.createEmptyMovieClip("bar", 3);
frm.bar._x = 10;
frm.bar._y = 40;
frm.bar.beginFill(0x00FF00, 100);
frm.bar.moveTo(0, 1);
frm.bar.lineTo(10, 1);
frm.bar.lineTo(10, 10);
frm.bar.lineTo(0, 10);
triangle_mc.endFill();
//
// ドラッグ可能にする
frm.onPress = function() {
	this.startDrag();
	frm.counter.backgroundColor = 0xFFFFCC;
};
frm.onRelease = frm.onReleaseOutside=function () {
	this.stopDrag();
	frm.counter.backgroundColor = 0xDDDDDD;
};
//
// ◎ フレームレートのカウント処理
// 経過時間の初期値
tm = getTimer();
// 1フレーム進む時間毎に随時実行
frm.onEnterFrame = function() {
	// 変数 rate に フレームレートの小数第3位までを代入
	rate = Math.round(1000000/(getTimer()-tm))/1000;
	// テキストフィールドにそのフレームレートを表示
	frm.counter.text = rate;
	// アナログ表示バーをその横幅にする
	frm.bar._width = rate;
	tm = getTimer();
};
/*-----------------------------------------------------*/

要は,何かの Flash を作成してみたとき,
上のスクリプトを作成したSuzukaプロジェクトファイルの フレーム1 に上のスクリプトをコピペするだけでフレームレートの測定が簡単にできる。
というものです。
手動で配置するインスタンスは無いので,削除も簡単ですね。

※ 上のスクリプトは Suzuka だけではなく,
  ActionScript2.0 または 1.0のパブリッシュ設定であれば,
  Adobe Flash MX 以上でもそのまま使用できます。

アニメーションは関係ないので,ダウンロード用の PDR と SCF ファイルは不要だと思いますが,一応上のダウンロードファイルには入れてあります。