デバッグ用のメッセージを見ると、ファイルが見つからないというような文が表示されていましたが、組み立てたファイルのパスは間違っていないことを確認しましたし、画像ファイルも置いてあります。そしてNTile_ini関数で画像を読み込めなかった理由を探るために様々な部分に同様の画像を表示させる記述(//デバッグ用表示とコメントを入れた部分)を挿入してプログラムを実行させたところ、本来NTile_ini関数で呼び出す筈の部分以外の全ての記述で画像が表示できてしまいました。ATile_ini関数で読み込むtxtファイルとNTile_ini関数で読み込むtxtファイルは同一のツールで生成したものであり、念のため確認してみたものの問題はありませんでした。
似たような記述であるATile_ini関数とNTile_ini関数両方で画像が表示できないのであれば記述が悪いのだと理解できます。
NTile_ini関数で読み込もうとした画像が読み込めないのであれば画像ファイルやパスのスペル、フォルダ構成などに問題あるのだと分かります。
main.cppで読み込めてTileData.cppで読み込めないのであればTileData.cppが悪いのだと理解できます。
しかし、本来NTile_ini関数で表示する部分以外の全てにおいて画像を読み込み表示できてしまったためどこに問題があるのか全く分かりません。
一体何故TileData.cppの145行目で画像を読み込まないのでしょうか?どなたかよろしくお願いします。
TileData.cpp
#include "DxLib.h"
#include "stdio.h"
#include "TileDataFrame.h"
struct ATileData ATile[18];
struct NTileData NTile[3];
void ATile_ini(){
int file,i,j,k,n=0,m=0,ed=0;
int l;//テスト用
int text[32];
char textc[32];
int ATRule[48][4][2];
int Pic[192];
int maketipsc;//オートタイルチップを作成するスクリーン
char FPass[] = "./Data/Pics/TileA/";
char Exten[] = ".png";
char pass[64];
//-オートタイル格納用配列の読み込み-
file = FileRead_open( "./Data/Txt/ATileRuleData.txt" ) ;
if(file==NULL){printfDx("read error\n");return;}
while(1){
for(i=0;i<32;i++){
text[i] = FileRead_getc(file);
textc[i] = text[i];
if(textc[i]=='/'){while(FileRead_getc(file)!='\n'){i=-1;continue;}}
if(text[i]==',' || text[i]=='\n'){textc[i]='\0';break;}
if(text[i]==EOF){ed=1;break;}
}
if(ed==1){FileRead_close(file);break;}
ATRule[m/8][(m/2)%4][m%2] = atoi(textc);
m++;
}
n=0;m=0;ed=0;
//-オートタイルデータの読み込み-
file = FileRead_open( "./Data/Txt/ATileData.txt" ) ;
if(file==NULL){printfDx("read error\n");return;}
while(1){
for(i=0;i<32;i++){
text[i] = FileRead_getc(file);
textc[i] = text[i];
if(textc[i]=='/'){while(FileRead_getc(file)!='\n'){i=-1;continue;}}
if(text[i]==',' || text[i]=='\n'){textc[i]='\0';break;}
if(text[i]==EOF){ed=1;break;}
}
if(ed==1){FileRead_close(file);break;}
switch(m){
case 0: for(i=0;i<32;i++){
ATile[n].name[i] = textc[i];
}
break;
case 1: ATile[n].pri = atoi(textc);break;
case 2: ATile[n].pat = atoi(textc);break;
}
m++;
if(m==3){m=0;n++;}
}
//画像データの読み込み
for(i=0;i<18;i++){
strcpy(pass,FPass);strcat(pass,ATile[i].name);strcat(pass,Exten);
for(j=0;j<192;j++){
Pic[j] = MakeGraph(16,16);
}
LoadDivGraph( pass , 48*ATile[i].pat , 6*ATile[i].pat , 8 , 16 , 16 , Pic ) ;
for(k=0;k<4;k++){
for(j=0;j<48;j++){
ATile[i].pics[k][j] = MakeGraph(32,32);
}
}
for(k=0;k<ATile[i].pat;k++){
for(j=0;j<48;j++){
maketipsc = MakeScreen( 32, 32, TRUE ) ;
SetDrawScreen( maketipsc ) ;
DrawGraph( 0, 0,Pic[ATRule[j][0][0]+6*ATRule[j][0][1]*ATile[i].pat],TRUE);
DrawGraph(16, 0,Pic[ATRule[j][1][0]+6*ATRule[j][1][1]*ATile[i].pat],TRUE);
DrawGraph( 0,16,Pic[ATRule[j][2][0]+6*ATRule[j][2][1]*ATile[i].pat],TRUE);
DrawGraph(16,16,Pic[ATRule[j][3][0]+6*ATRule[j][3][1]*ATile[i].pat],TRUE);
SetDrawScreen( DX_SCREEN_FRONT ) ;
ATile[i].pics[k][j] = maketipsc;
}
}
memset(pass,0,sizeof(pass));
}
//-テスト-
for(i=0;i<18;i++){
ClearDrawScreen();//テスト
for(l=0;l<4;l++){
for(j=0;j<3;j++){
for(k=0;k<16;k++){
DrawGraph(j*34+l*110,k*34,ATile[i].pics[l][j*16+k],TRUE);//画像表示箇所
}
}
}
ScreenFlip();WaitKey();//テスト
}
}
void NTile_ini(){
int file,i,j,n=0,m=0,ed=0;
int k,l,a;//テスト
int text[32];
char textc[32];
char FPass[] = "./Data/Pics/TileN/";
char Exten[] = ".png";
char pass[64];
int NTpic;
int xsize=0,ysize=0;
//-ノーマルタイルデータの読み込み-
file = FileRead_open( "./Data/Txt/NTileData.txt" ) ;
if(file==NULL){printfDx("read error\n");return;}
while(1){
for(i=0;i<32;i++){
text[i] = FileRead_getc(file);
textc[i] = text[i];
if(textc[i]=='/'){while(FileRead_getc(file)!='\n'){i=-1;continue;}}
if(text[i]==',' || text[i]=='\n'){textc[i]='\0';break;}
if(text[i]==EOF){ed=1;break;}
}
if(ed==1){FileRead_close(file);break;}
if(m==0){
for(i=0;i<32;i++){
NTile[n].name[i] = textc[i];
}
}
else if(m>=1&&m<264){
NTile[n].pri[m-1] = atoi(textc);
}
else{
m=0;
n++;
continue;
}
m++;
}
//-画像データの読み込み-
for(i=0;i<3;i++){
for(j=0;j<264;j++){
NTile[i].pics[j] = MakeGraph(32,32);
}
strcpy(pass,FPass);strcat(pass,NTile[i].name);strcat(pass,Exten);
DrawFormatString( 0, 0, GetColor(255,255,255), "%s", pass);//パス点検用1
DrawFormatString( 0, 20, GetColor(255,255,255), "./Data/Pics/TileN/015-ForestTown01.png");//パス点検用2
DrawFormatString( 0, 40, GetColor(255,255,255), "./Data/Pics/TileN/%s.png",NTile[i].name);ScreenFlip();WaitKey();ClearDrawScreen();//パス点検用3
NTpic = LoadGraph(pass) ;//ここで画像が読み込まれない
DrawGraph( 0, 0,NTpic,TRUE);ScreenFlip();WaitKey();ClearDrawScreen();//デバッグ用表示2
GetGraphSize( NTpic , &xsize , &ysize ) ;
LoadDivGraph( pass , (xsize/32)*(ysize/32) , xsize/32 , ysize/32 , 32 , 32 , NTile[i].pics ) ;
}
for(i=0;i<3;i++){ClearDrawScreen();//テスト
for(l=0;l<2;l++){
for(j=0;j<15;j++){
for(k=0;k<8;k++){
DrawGraph( k*32+l*260, j*32,NTile[i].pics[k+j*8+l*120],TRUE);//画像表示箇所@表示できない
}
}
}ScreenFlip();WaitKey();
}
a=LoadGraph("./Data/Pics/TileN/015-ForestTown01.png");//デバッグ用表示4
DrawGraph( 300, 0,a,TRUE);ScreenFlip();WaitKey();
}
void Tile_ini(){
ATile_ini();
NTile_ini();
}
#include "DxLib.h"
#include "main.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
Tile_ini();ScreenFlip();
int a,b,c,d;
char FPass[] = "./Data/Pics/TileN/";
char Exten[] = ".png";
char text[32] = "001-G_Water01";
char text2[32]= "015-ForestTown01";
char pass[64];
char pass2[64];
a=LoadGraph("./Data/Pics/TileA/001-G_Water01.png");
b=LoadGraph("./Data/Pics/TileN/015-ForestTown01.png");
strcpy(pass,FPass);strcat(pass,text);strcat(pass,Exten);
strcpy(pass2,FPass);strcat(pass2,text2);strcat(pass2,Exten);
c=LoadGraph(pass);d=LoadGraph(pass2);
DrawGraph( 0, 0,a,TRUE);//デバッグ用表示5
DrawGraph( 0, 0,b,TRUE);//デバッグ用表示6
DrawGraph( 300, 300,c,TRUE);//デバッグ用表示7
DrawGraph( 300, 300,d,TRUE);ScreenFlip();WaitKey();//デバッグ用表示8
DxLib_End(); // DXライブラリ終了処理
return 0;
}
#ifndef DEF_TileDataFrame_H //二重include防止
#define DEF_TileDataFrame_H
struct ATileData{
int pics[4][48];//
int pri;//
int pat;//
char name[32];//画像名
};
struct NTileData{
int pics[264];
int pri[264];
char name[32];//画像名
};
#endif
#ifndef DEF_Main_H //二重include防止
#define DEF_Main_H
//-TileData.cpp-
void Tile_ini();
//-Scene.cpp-
void scene();
#endif