マップデータをバイナリ保存したあとにマップサイズなどを変えたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
chalaza

マップデータをバイナリ保存したあとにマップサイズなどを変えたい

#1

投稿記事 by chalaza » 11年前

アクションゲームのマップを作っていて、「マップデータ数値」、「マップの高さ」「マップの横幅」をバイナリ形式で保存できるようにしました。
for文でマップの最大数の分だけ繰り返してその3種類のデータを1つのバイナリファイルに保存します。
要するにバイナリデータに「マップ1数値」→「マップ1高さ」→「マップ1横幅」→「マップ2数値」→「マップ2高さ」…と保存しているのです。
読み込むときも全く同じで、マップ1数値から読み込んでいきます。

そこで、一度バイナリファイルにマップのデータを保存した後に、例えばステージ2の高さを変えて、マップデータを読み込もうとすると停止したり、
他のマップが崩れたりしてしまいます。
このように、一度データを保存した後に、マップの高さや横幅を変えても、他のマップに影響しないようにするにはどうすれば良いでしょうか?

MapdataSelectがマップの数だけある構造体配列です。MapMAXはマップの最大数でる。

コード:

//ファイルを出力
	if(EditMode == 1 && Keyboard_Get( KEY_INPUT_P ) == 1){
		FILE *fp = fopen( "MapData.dat", "wb" );
		for(int i = 0; i < MapMAX; i++)
		{
			fwrite(  MapdataSelect[i].Map, sizeof( MapdataSelect[i].Map),  MapdataSelect[i].Width* MapdataSelect[i].Height, fp ); //出力
			fwrite( & MapdataSelect[i].Width, sizeof( MapdataSelect[i].Width), 1, fp ); //出力
			fwrite( & MapdataSelect[i].Height, sizeof( MapdataSelect[i].Height), 1, fp ); //出力
		}
		fclose( fp );//ファイルを閉じる

		PlaySoundMem( EditExportSE, DX_PLAYTYPE_BACK ); // 効果音を再生する
		Map_Update( Player );//マップ更新
	}
	//取り込み
	if(EditMode == 1 && Keyboard_Get( KEY_INPUT_O ) == 1){
		FILE *fp = fopen( "MapData.dat", "rb" );
		for(int i = 0; i < MapMAX; i++)
		{
			fread( MapdataSelect[i].Map, sizeof(MapdataSelect[i].Map), MapdataSelect[i].Width*MapdataSelect[i].Height, fp );
			fread( &MapdataSelect[i].Width, sizeof(MapdataSelect[i].Width), 1, fp );
			fread( &MapdataSelect[i].Height, sizeof(MapdataSelect[i].Height), 1, fp );
		}
		fclose( fp );

		PlaySoundMem( EditImportSE, DX_PLAYTYPE_BACK ); // 効果音を再生する
		Map_Update( Player );//マップ更新
	}

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: マップデータをバイナリ保存したあとにマップサイズなどを変えたい

#2

投稿記事 by h2so5 » 11年前

マップ横幅と縦幅を読み込む前にマップデータを読み込んでいるのが問題なのでは?
先に横幅と縦幅が分かっていないと読み込むべきサイズが分からないと思うのですが。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: マップデータをバイナリ保存したあとにマップサイズなどを変えたい

#3

投稿記事 by softya(ソフト屋) » 11年前

読み込むときにファイルに書き出しているマップの高さを使っていないからでは無いですか?
つまり、ファイルに書き込む順番を変えれば解決しませんか?

「マップ1高さ」→「マップ1横幅」→「マップ1数値」
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

chalaza

Re: マップデータをバイナリ保存したあとにマップサイズなどを変えたい

#4

投稿記事 by chalaza » 11年前

ありがとうございます。一応停止しないようにはなりました。
でも無理やりマップの高さなどを変えると崩れてしまうのは仕方ないようなので
マップエディタの方に高さを変えられる設定をつけてみます。
解決です。

閉鎖

“C言語何でも質問掲示板” へ戻る