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 -