シューティングゲームの館

今日 昨日


3. 静的変数を使用してFPSを表示する。

 先ほどは、関数間を移動しても、失いたくない値を格納している変数は全てグローバル宣言していました。

しかし、中には、特定の関数でしか参照しないものもあります。

1つの関数間でしか使用しないのに、全ての関数から参照できるようなグローバル宣言していたらもったいない気がしますね。

ですから、こんなときはstaticつまり静的変数を使用します。

これを使うことで、関数間を処理が移動しても、変数の中身が失われること無く保存されます。


//素材必要なし

#include "DxLib.h"

int counter=0;
int color_white;
char Key[256];

void SetColor(){
        color_white = GetColor(255,255,255);            //白色ハンドルを取得
        return;
}

void FpsTimeFanction(){
        static int FpsTime[2]={0,},FpsTime_i=0;
        static double Fps=0.0;                          //静的変数宣言

        if(FpsTime_i== 0)
                FpsTime[0]=GetNowCount();                           //1周目の時間取得
        if(FpsTime_i==49){
                FpsTime[1]=GetNowCount();                           //50周目の時間取得
                Fps = 1000.0f / ((FpsTime[1] - FpsTime[0]) / 50.0f);//測定した値からfpsを計算
                FpsTime_i=0;
        }
        else
                FpsTime_i++;                                          //現在何周目かカウント
        if(Fps != 0)
                DrawFormatString(565,460,color_white,"FPS %.1f",Fps); //fpsを表示
        return;
}

int WINAPI WinMain( HINSTANCE hInstance, 
                                   HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        int RefreshTime=0;

        ChangeWindowMode( TRUE ) ;
        if( DxLib_Init() == -1 ) return -1; 

        SetDrawScreen( DX_SCREEN_BACK ) ;               //裏画面を使用する。
        SetColor();                                     //色を取得する

        while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){
                RefreshTime = GetNowCount();            //今の時間を取得
                ClearDrawScreen();                      //裏画面のデータを全て削除

                FpsTimeFanction();

                ScreenFlip() ;                          //裏画面データを表画面へ反映

                counter++;

                if(Key[KEY_INPUT_ESCAPE]==1)    break;  //Escapeが押されたら終了
                while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ
        }
                
        DxLib_End() ;
        return 0 ;
}

実行結果


戻る                                  次へ
メニューへ戻る


トップページへ


DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi Yamada.