さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
ScreenFlip(); が1回実行されるのにかかる時間を計測してみよう そのためにGetNowCount()関数を用います
ScreenFlip(); が1回実行されるのにかかる時間を計測してみよう そのためにGetNowCount()関数を用います
マックス「
リフレッシュレートがいくらに設定されていても
十字キーを押した時の自分の飛行機の1秒間の移動量(移動スピード)を
リフレッシュレートが
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;
if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;
if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;
if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;
を
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y -4* (ScreenFlip();が1回実行されるのにかかる時間)*144;
if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y +4* (ScreenFlip();が1回実行されるのにかかる時間)*144;
if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x -4* (ScreenFlip();が1回実行されるのにかかる時間)*144;
if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4* (ScreenFlip();が1回実行されるのにかかる時間)*144;
もしくは
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y -4* (1/(ScreenFlip();が1秒間に実行される回数))*144;
if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y +4* (1/(ScreenFlip();が1秒間に実行される回数))*144;
if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x -4* (1/(ScreenFlip();が1秒間に実行される回数))*144;
if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4* (1/(ScreenFlip();が1秒間に実行される回数))*144;
に書き換えればいいのはわかったが・・・
どうやってScreenFlip(); が1回実行されるのにかかる時間を求めるかだが・・・」
ソーラー「ここで登場するのが
GetNowCount()関数です
GetNowCount();
が実行されると
GetNowCount()には戻り値として
WindowsOSが起動してからの経過時間(単位はミリ秒です)
が代入されます
マックス「ミリ秒?」
ソーラー「16ミリ秒は
0.0016秒です
つまり
GetNowCount()関数を用いれば
WindowsOSが起動してからの経過時間(単位はミリ秒です)を求めることができるというわけです
GetNowCount()関数
の
DXライブラリの関数置き場の解説は以下のようになっています
👇
時間関係の関数
宣言 int GetNowCount( void ) ;
概略 ミリ秒単位の精度を持つカウンタの現在値を得る
引数 なし
戻り値 Windowsが起動してから経過時間をミリ秒単位であらわした値
解説 すぐ上に書いてありますが、Windows が起動してから経過時間をミリ秒単位であらわした値が返ってきます。この関数の存在意義は時間の計測にあります。特定の時間を取得する事はこの関数では出来ません。
サンプル
6秒間待つ
Windows用
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int StartTime ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 現在経過時間を得る
StartTime = GetNowCount() ;
// 計測開始から6秒が過ぎるまでループ
while( GetNowCount() - StartTime < 6000 )
{
// メッセージ処理
if( ProcessMessage() == -1 )
{
break ; // エラーが起きたらループから抜ける
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
ですから
ScreenFlip(); が実行される前の時間
と
ScreenFlip(); が実行された後の時間を調べて
ScreenFlip(); が実行された後の時間からScreenFlip();が実行される前の時間を引けば
ScreenFlip(); が1回実行される時間(単位はミリ秒です)が求められるというわけです」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます