PlayLoud!!

Since1997

画像を分割して表示

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;
}