描画まではなんとか完成したのですがファイルの入出力で躓いています。
vector(型は自分で定義した構造体Layer)に放り込まれたマップのデータをdatファイルに保存して後で読み込める機能を付けようと色々やってみました。
ですがファイル関係のものをプログラムをするのも初めてで、そもそもまともにプログラミングをしたことがないのでここ数日そこで詰んでいます。
以下ソースコードから、関係ある箇所の抜粋です。
/*構造体定義*/
typedef struct{
int nLayer0;
int nLayer1;
} Layer;
/*クラスのメンバ*/
std::vector<Layer> maLayer;
char sFile[64], stFile[64];
/*コンストラクタ内(別クラスにて画像を分割して配列に)*/
mTile = new Image("Graphic/mapchip0.bmp", 48, 48);
mTile2 = new Image("Graphic/mapchip1.bmp", 48, 48);
/*読み込み部分(char* sFile,int mSizeX,mSizeYは入力で取得)*/
for (auto i = 0; i != mSizeX * mSizeY; ++i) {maLayer.push_back({ 0,0 });}
FILE *hFile;
hFile = fopen(sFile,"rb");
fread(&maLayer, sizeof(std::vector<Layer>),maLayer.size(), hFile);
fclose(hFile);
/*描画部分(int mLocah,mLocawは画面スクロール用の変数。値は正常です)*/
for (auto i = 0; i != WIN_HEIGHT / 48; ++i) {
for (auto j = 0; j != WIN_WIDTH / 2 / 48; ++j) {
mTile->draw((j + mLocaw) * 48, (i + mLocah) * 48, maLayer[(i + mLocah) * mSizeX + j + mLocaw].nLayer0);
mTile2->draw((j + mLocaw) * 48, (i + mLocah) * 48, maLayer[(i + mLocah) * mSizeX + j + mLocaw].nLayer1);
}
}
/*描画用の別クラスの関数(int* mhaGraphには画像ハンドルを格納)*/
void Image::draw(int dstX, int dstY, int bArray) const {
DrawGraph(dstX, dstY, mhaGraph[bArray], TRUE);
}
/*保存部分(char* stFileは入力で取得)*/
FILE *htFile = fopen(stFile,"wb");
fwrite(&maLayer, sizeof(std::vector<Layer>), maLayer.size(), htFile);
fclose(htFile);
※(例外がスローされました:読み取りアクセス違反 this->mhaGraphに~)と描画用の関数のところで止まる
ということは、ちゃんとファイルの読み込みができていないか書き出しの時点でアウトなのかどちらかですよね?
デバッグでvectorの中身を覗いてみると、かなり大きい数字が並んでいたりマイナスになっていたり???だったりしていたのでやはりfreadかfwrite関数の使い方がまずいのでしょうか?