今回は、DxLibで作っているHopeZeroというサバイバルゲームにて以下の問題が起こったので相談させていただくことにしました。
//アイテム読み込み
FILE *ItemNameCSV = fopen("data\\items\\ItemName.aot","r");
FILE *ItemDataCSV = fopen("data\\items\\ItemProperty.aoi","r");
FILE *ItemImageCSV = fopen("data\\items\\ItemImage.aot","r");
if(ItemNameCSV==NULL)ErrorReport("ItemDataNotFound");
int cnt = 0;
int material_cnt = 0;
for(cnt=0;;cnt++){
char *dm = "";
if(fgets(dm,150,ItemNameCSV)==NULL)break;
}
fseek(ItemNameCSV,0,0);
ItemData = new Item[cnt];
int *insMaterialData = new int[cnt];
for(int i=0;i<cnt;i++){
//アイテム名取得
char *ItemName = "";fgets(ItemName,50,ItemNameCSV);
ItemName[strlen(ItemName)-1] = 0;
for(int i2=0;i2<strlen(ItemName);i2++)ItemName[i2]++;
ItemData[i].Name.assign(ItemName,strlen(ItemName));
//アイテムプロパティ取得
int ReadByte[11];
fread(ReadByte,sizeof(int),11,ItemDataCSV);
fgetc(ItemDataCSV);
ItemData[i].Category = ReadByte[0];
if(ReadByte[0]==Material){
insMaterialData[material_cnt] = i;
material_cnt++;
}
ItemData[i].EatLevel = ReadByte[1];
ItemData[i].AttackDamage = ReadByte[2];
ItemData[i].ThermoStay = ReadByte[3];
ItemData[i].Weight = ReadByte[4];
ItemData[i].Material[0] = ReadByte[5];
ItemData[i].Material[1] = ReadByte[6];
ItemData[i].Material[2] = ReadByte[7];
ItemData[i].Rot = ReadByte[8];
ItemData[i].RotToMaterial = ReadByte[9];
ItemData[i].LightLevel = ReadByte[10];
//アイテム画像ロード
char *fn = "";
fgets(fn,100,ItemImageCSV);
fn[strlen(fn)-1] = 0;
for(int l=0;l<strlen(fn);l++)fn[l]++;
ItemData[i].ImageHandle = LoadGraph(fn);
}
fclose(ItemNameCSV);
fclose(ItemDataCSV);
fclose(ItemImageCSV);
MaterialData = new int[material_cnt];
for(int i=0;i<material_cnt;i++){
MaterialData[i] = insMaterialData[i];
}
MaterialLength = material_cnt;
delete [] insMaterialData;
ScreenFlip();
//素材の読み込み
InitSoundMem();
//音楽
BGM[0] = LoadSoundMem("textures\\bgm\\bgm-1.mp3");
BGM[1] = LoadSoundMem("textures\\bgm\\bgm-2.mp3");
BGM[2] = LoadSoundMem("textures\\bgm\\bgm-3.mp3");
BGM[3] = LoadSoundMem("textures\\bgm\\bgm-4.mp3");
//画像
img_TitleGraph = LoadGraph("data\\title.png");
LoadDivGraph("textures\\entity\\m\\main.png",6,3,2,40,56,img_PlayerM);
LoadDivGraph("textures\\entity\\f\\main.png",6,3,2,40,56,img_PlayerF);
img_backGraph[0] = LoadGraph("textures\\bg\\bg_0.png");
img_backGraph[1] = LoadGraph("textures\\bg\\bg_1.png");
img_backGraph[2] = LoadGraph("textures\\bg\\bg_2.png");
img_backGraph[3] = LoadGraph("textures\\bg\\bg_3.png");
img_backGraph[4] = LoadGraph("textures\\bg\\bg_4.png");
img_backGraph[5] = LoadGraph("textures\\bg\\bg_5.png");
img_backGraph[6] = LoadGraph("textures\\bg\\bg_6.png");
img_weather[0] = LoadGraph("textures\\weather\\sunny.png");
img_weather[1] = LoadGraph("textures\\weather\\cloudy.png");
img_weather[2] = LoadGraph("textures\\weather\\rainy.png");
img_UIicon[0] = LoadGraph("textures\\ui\\ico_param.png");
//エンティティ画像
img_Tree = LoadGraph("textures\\entity\\tree\\main.png");
img_SereTree = LoadGraph("textures\\entity\\seretree\\main.png");
img_Grass = LoadGraph("textures\\entity\\grass\\main.png");
音楽リソースの読み込みでBGM[0]とBGM[1]にエラーコードである-1が代入されてしまいます。
音楽ファイルの存在も確認できましたし、スペルも間違っては居ないと思います。
更に不可解なことに、読み込む前に存在している音楽データを適当に読み込めば、BGM[0]とBGM[1]には識別コードが代入されます。例↓
//素材の読み込み
InitSoundMem();
LoadSoundMem("textures\\bgm\\bgm-1.mp3");
//音楽
BGM[0] = LoadSoundMem("textures\\bgm\\bgm-1.mp3");
BGM[1] = LoadSoundMem("textures\\bgm\\bgm-2.mp3");
BGM[2] = LoadSoundMem("textures\\bgm\\bgm-3.mp3");
BGM[3] = LoadSoundMem("textures\\bgm\\bgm-4.mp3");
誰か原因を教えてください。
お願いします。