akiyamaさんどうも、DXライブラリの管理人です。
メールは届いていないようです。申し訳ありませんがもう一度お送り下さい。
画像ハンドルはメモリアドレスではなく、画像ハンドルのポインタ配列の
インデックスに画像ハンドルだと言うことを示すビットとエラー防止用の
ビットが加わったものとなっています。
どのようにご説明すればよいのか分かりませんが、とりあえず画像を読み込む
クラスと使うクラスを別々にしたサンプルプログラムを作成してみましたので、
宜しければご覧になってみて下さい。
ResourceName 配列の画像ファイル名を実際にある画像ファイル名に書き換えて
実行すると、画像が左右に動きつつ画面端に行くたびに画像が変わる、という
プログラムになっています。
#include "DxLib.h"
#define HANDLE_NUM (5)
// 読み込む画像の配列
const char *ResourceName[HANDLE_NUM] =
{
"Cursor.bmp",
"Chara.bmp",
"Bom.bmp",
"Sample.bmp",
"Enemy.bmp",
};
// 画像ハンドルを扱うクラス
class Resource
{
public:
Resource()
{
// 画像を読み込む
for( int i = 0; i < HANDLE_NUM; i ++ )
Handle[i] = LoadGraph( ResourceName[i] );
}
~Resource()
{
// 画像を解放する
for( int i = 0; i < HANDLE_NUM; i ++ )
DeleteGraph( Handle[i] );
}
// 指定の画像ハンドルを取得する
int GetHandle( int No )
{
return Handle[No];
}
private:
int Handle[HANDLE_NUM];
};
// 実処理を行うクラス
class Main
{
public:
Main()
{
// 画像ハンドルを扱うクラスを作成
res = new Resource;
x = 0;
add = 8;
image = 0;
}
~Main()
{
// 画像ハンドルを扱うクラスを削除
delete res;
}
// 動作処理
void Frame( void )
{
x += add;
if( x < 0 || x > 640 )
{
add = -add;
image++;
if( image == HANDLE_NUM ) image = 0;
}
}
// 描画処理
void Render( void )
{
DrawGraph( x, 0, res->GetHandle( image ), TRUE );
}
private:
int x, add, image;
Resource *res;
};
Main *mp;
// WinMain 関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK );
// 実処理を行うクラスを作成
mp = new Main;
// メインループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 実処理を行うクラスの動作を行う
mp->Frame();
// 画面をクリア
ClearDrawScreen();
// 実処理を行うクラスの描画を行う
mp->Render();
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}