52. 特定の時間で特定の変化をさせる

ゲームは大抵1秒間に60回描写します。普段使っているループの最後にcount++;しているプログラムでは、

1秒間に、countが60増えます。これを利用して1秒間で、拡大率を0から1にしたいとき、どうしたらいいでしょうか。

拡大率とカウンタを対応させたいわけですね。

<pre> 
拡大率 : 0.0→1.0
カウンタ: 0 →60
</pre> 
 
これは、 (拡大率) / (カウンタ) で実現できます。つまり

(変化させたい量) / (その時間に増加するトータルカウンタ量)

で計算できます。 上記の例では、

カウンタに1/60をかけたらカウンタが0から60に増える間に拡大率は0から1に増加します。


---例---
4秒間で、画像を180度回転させたい時
--------

変化させたい量=回転角度3.14ラジアン

その時間に増加するトータルカウンタ量=60*4カウンタ

ですから、

count * (3.14/(60*4);

で、そのカウンタに応じて回転角が変化します。

実際にはint型と、double型が混合しないように注意してください。

以上の例の拡大率、回転角度を関数に表すとこうなります。

DrawRotaGraph( 320 , 240 , (double)count* 1.0/60.0 , (double)count * PI/ 240.0 , image[0] , TRUE ) ;


#include "DxLib.h"
#define PI 3.1415926
 
int image[16],count=0;
char Key[256];
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
        SetDrawScreen( DX_SCREEN_BACK );
        LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;
 
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){
                
                DrawRotaGraph( 320 , 240 , (double)count* 1.0/60.0 , (double)count * PI/ 240.0 , image[0] , TRUE  ) ;
 
                count++;
                ScreenFlip();
        }
        DxLib_End();
        return 0;
}


→掲示板で質問する



- Remical Soft -