ファイルにあるbmp画像を読み込む
いろいろな記事を調べてファイルにある画像や音を読みこむ処理を作ることができたのですが、
画像の読み込み処理がうまくいきません。
音は問題なく読み込めていて、
画像はLoadStateNo == 2の段階から進まずに無限ループしてしまいます。
LoadGraph後にWaitKey()を追加して1秒程度待つことで無限ループせず処理を終えることができましたが、
DxLib終了後にエラーが発生します。
何が原因で画像の読み込みがうまくいかないのでしょうか?
#include <stdio.h>
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(true);//フルスクリーン解除(ウィンドウ化)
SetUseDirectInputFlag(TRUE);//キー入力状態の取得にDirectInputを使用
SetDoubleStartValidFlag(1);//多重起動を許可
if (DxLib_Init() < 0)return-1;;//初期化系
SetDrawScreen(DX_SCREEN_BACK);//裏画面描画
SetTransColor(0, 255, 0);//画像の緑を透過色に指定
//--変数定義と初期設定--
#define PI 3.14159265359//円周率
#define Null -16777216//ステコンパラメーターを変更しない時に代用する値
#define tempMax 99//一時変数の個数
int i, ii , iii, iiii//ループ系
, temp0[tempMax];//一時変数
;
for (i = ii = iii = iiii = 0; i < tempMax; i++) {//temp初期化
temp0[i] = 0;
}
-- 省略 --
//フォントサイズ,太さ,描画タイプ
#define FontSize 12
#define FontThickness 2
#define FontType DX_FONTTYPE_NORMAL
SetFontSize(FontSize);//文字サイズ指定
SetFontThickness(FontThickness);//文字の太さ指定
ChangeFontType(FontType);//文字描画タイプ指定
-- 省略 --
#define SpriteNumMax 1
struct {//--画像の基本情報--
int GraphHandle, Scale_X, Scale_Y;
}Sprite[SpriteNumMax];
-- 省略 --
#define SoundNumMax 2
#define PlaySndNumMax 99
int SoundHandle[SoundNumMax];
-- 省略 --
//--ファイル読み込み処理--
FILEINFO FileInfo;
DWORD_PTR FindHandle;
char Path[256];//パス結合先
int LoadFile = 0, LoadStateNo = 0;
while (LoadFile<2) {//ファイルの読み込み中にNowLoadingを表示
if (!LoadFile) {//画像ファイル読み込み
if (!LoadStateNo) {//ファイルの検索開始,最初のファイルの情報を取得
FindHandle = FileRead_findFirst("sprite\\*.bmp", &FileInfo);
if (FindHandle != (DWORD_PTR)-1) {//ファイルが見つかった場合
i = 0;//配列番号指定リセット
LoadStateNo++;//次の工程へ
}
else {//ファイルが無ければ検索終了
FileRead_findClose(FindHandle);//検索ハンドルの後始末
LoadFile++;
}
}
if (LoadStateNo == 1) {
sprintf_s(Path, sizeof(Path), "sprite\\%s", FileInfo.Name);//ディレクトリパスとファイル名を結合
SetUseASyncLoadFlag(TRUE);//ファイル読み込みを非同期で行う
Sprite[i].GraphHandle = LoadGraph(Path);//結合したパスを指定
//Sprite[i].GraphHandle = LoadGraph("sprite\\000_mouse_cursor.bmp");//結合したパスを指定
//WaitKey();
LoadStateNo++;//次の工程へ
}
if (LoadStateNo == 2 && CheckHandleASyncLoad(Sprite[i].GraphHandle) != TRUE) {//現在のファイル読み込みが終了した
if (FileRead_findNext(FindHandle, &FileInfo) >= 0 && i < SpriteNumMax) {//次のファイルを検索
i++; LoadStateNo = 1;
}
else {//ファイル検索終了
FileRead_findClose(FindHandle);//検索ハンドルの後始末
LoadFile++; LoadStateNo = 0;
}
}
}
if (LoadFile==1) {//音ファイル読み込み
if (!LoadStateNo) {//ファイルの検索開始,最初のファイルの情報を取得
FindHandle = FileRead_findFirst("sound\\*.wav", &FileInfo);
if (FindHandle != (DWORD_PTR)-1) {//ファイルが見つかった場合
i = 0;//配列番号指定リセット
LoadStateNo++;//次の工程へ
}
else {//ファイルが無ければ検索終了
FileRead_findClose(FindHandle);//検索ハンドルの後始末
LoadFile++;
}
}
if (LoadStateNo == 1) {
sprintf_s(Path, sizeof(Path), "sound\\%s", FileInfo.Name);//ディレクトリパスとファイル名を結合
SetUseASyncLoadFlag(TRUE);//ファイル読み込みを非同期で行う
SoundHandle[i] = LoadSoundMem(Path, PlaySndNumMax);//結合したパスを指定
LoadStateNo++;//次の工程へ
}
if (LoadStateNo == 2 && CheckHandleASyncLoad(SoundHandle[i]) != TRUE) {//現在のファイル読み込みが終了した
if (FileRead_findNext(FindHandle, &FileInfo) >= 0 && i < SoundNumMax) {//次のファイルを検索
i++; LoadStateNo = 1;
}
else {//ファイル検索終了
FileRead_findClose(FindHandle);//検索ハンドルの後始末
LoadFile++; LoadStateNo = 0;
}
}
}
ClearDrawScreen();
DrawFormatString(0, 0, -1, "NowLoading");
DrawFormatString(0, FontSize, -1, "LoadFile:%d,LoadStateNo:%d", LoadFile, LoadStateNo);
DrawFormatString(0, FontSize*2, -1, "FilePath:%s,Handle[%d]", Path,i);
ScreenFlip();
}
//--ファイル読み込み処理ここまで--
for (i = 0; i < SpriteNumMax; i++) {//画像の読み込み後に基本情報を格納
GetGraphSize(Sprite[i].GraphHandle, &Sprite[i].Scale_X, &Sprite[i].Scale_Y);//画像サイズXY
}
//--メイン処理--
while (!ProcessMessage() * !System.ProgramEnd) {//ゲームメインループ
ClearDrawScreen();//描画初期化
-- 省略 --
}//メイン処理終了
for (i = 0; i < SoundNumMax; i++)DeleteSoundMem(SoundHandle[i]);//音メモリ開放
InitGraph();//画像ファイルのメモリ開放
InitSoundMem();//音ファイルのメモリ開放
DxLib_End();//Dx_Lib終了
return 0;
}//WINAPI