1枚絵を分割してメモリへ読み込む関数。
int LoadDivGraph( char *FileName , int AllNum , int XNum , int YNum , int XSize , int YSize , int *HandleBuf ) ; FileName : 分割読み込みする画像ファイル文字列のポインタ AllNum : 画像の分割総数 XNum ,YNum : 画像の横向きに対する分割数と縦に対する分割数 SizeX ,SizeY : 分割された画像一つの大きさ HandleBuf : 分割読み込みして得たグラフィックハンドルを保存するint型の配列へのポインタ
アニメーションするキャラの画像管理に便利。
傾く自機を表示してみた。
←→で傾き、何も押してないとニュートラル位置に戻る。ESCで終了。実行ファイルはこちら。
ソースは以下。
#include "DxLib.h" int count = 0; typedef struct{ int x,y,img; }ch_t; void fps(){ int i; static int t=0,ave=0,f[60]; f[count%60]=GetNowCount()-t; t=GetNowCount(); if(count%60==59){ ave=0; for(i=0;i<60;i++) ave+=f[i]; ave/=60; } if(ave!=0){ DrawFormatString(0, 0,GetColor(255,255,255),"%.1fFPS",1000.0/(double)ave); DrawFormatString(0,20,GetColor(255,255,255),"%dms" ,ave); } return; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int image[9]; char Key[256]; ch_t ch; int num = 4; if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理 ch.x =244; ch.y =120; SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定 LoadDivGraph( "jiki.bmp" , 9 , 9 , 1 , 152 , 240 , image );//画像を分割してimage配列に保存 while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){ //↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了 ch.img=image[num]; //表示画像をセット if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら { num -=1; if (num < 0) { num = 0; } } else if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら { num +=1; if (num > 8) { num = 8; } } else { num += (4 - num > 0) - (4 - num < 0); //正負の判定 } DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//[画像を描画 fps(); count++; ScreenFlip(); } DxLib_End(); return 0; }