別作業。(主にJavaScript)

2010年2月24日 (水)

別作業−2:動作速度をもうちょっと保つ。(処理時間の実測)

 偶々ネット上でフレーム制御というものが目に入ったので、読んでいたのですが、
フレーム制御って 「時間&画面の切り替え」 の意味もあったのか、と今更気づきました^^;
そして、PCで処理速度が変わるのって困りますね〜ぐらいしか理解できませんでした^^b(意味なし)


でも、何となく思い浮かんだことが無いわけでもない。
****以下は半分憶測です。(・v・ 鵜呑みは厳禁w*********
 

タイマーで呼び出された瞬間、次のタイマーをセットしてしまえば大丈夫な気もしますが、
タイマーをカウントダウンしながら処理をすることになります(?)。
 

これだとお互い足を引っ張ってる気がしないでもない。
そこで処理時間を測り、その時間を引いたタイマーを最後にセットして
お互い孤立させてみました。


javascript のゲームの方で試したら、少し処理落ちしにくくなった気がしますw

ちなみに javascriptでは Date と getTime を使用しています。

C++では組み込む必要があるか微妙ですが、時間は

#include < time.h > をしておくと
time_t ○○ の形で宣言しておいて
time(&○○); で取得できるようですね。

<様子>
Wink1

同じのを2つ開いてやっている様子(↑)
javascript ゲームは途中で投げ出したわけでは・・・無いっ!(・・;
制作中なのです。
アーマードお団子
やってみたい方はこちら(↑)

<追記>
表示してみればいいということで、実測の Timer 時間を、
①タイマーを呼び出し直後にセットしたとき
②タイマーを処理時間加味で最後にセットしたとき

で比較しました。処理落ちさせるために同じのを3つ開いてやっています。

<結果>
①下
Winj4

②下
Winj5

変わりませんねw^^3つ開いたことでタイマー自体がスローなカウントをしてしまっている
ようです・・・。すくしょではわかりませんが、値は安定せずに±1〜(2)ぐらいで揺れています。

1つだけ開いている状態なら、50~51で揺れているのでまず大丈夫です。

 

一応使ったソースを・・・

//①用
var st_d;//開始
var st_ms;

var ed_d;//終了
var ed_ms;

var func_time;//処理時間
var set_time;//セットする時間

//②用
var pst_ms;//開始1
var sst_ms;//開始2
var func_cnt =0;//1or2の判断
var mj_time;//開始1と2の差

//鯛マーコールバック*************************
function gameCallBack() {

st_d = new Date();

st_ms = st_d.getTime();
if(func_cnt == 0){pst_ms = st_d.getTime();}else{sst_ms = st_d.getTime();}


clearTimeout( timerID ); // タイマークリア
//timerID = setTimeout( "gameCallBack()" , 50 );//①ではこっちを。


if(func_cnt == 0){//基準時間取得後
func_cnt =1;
}else{ //タイマー時間取得後
func_cnt =0;
//計算
mj_time= sst_ms - pst_ms;
//ここでinnnerHTMLを書き換えて表示(略)
}

/*〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

ここに
いろいろな
動作が
入る。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜*/

ed_d = new Date();
ed_ms = ed_d.getTime();

func_time= ed_ms - st_ms;
set_time = 50 -func_time;
if(set_time < 1){ set_time =1;}


//timerID = setTimeout( "gameCallBack()" , set_time );//②ではこっちを。


}//********************************************


func_time を表示させれば処理時間もわかります^^
このPCでは打ち合っているときで最大 5 msec くらいでした。

そうすると処理落ちはタイマーがやられているケースが多いのかもしれませんね。

<図>

Winj2