マップファイルの読み込み

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

マップファイルの読み込み

#1

投稿記事 by belve » 16年前

Platinumで作成したマップデータを読み込みたいのですが、
http://inu.harisen.jp/scene_1/14.htmlmのエディタだとヘッダーのx,yのサイズ情報がそれぞれ4バイトになってるのでどう読み込めばいいのか分かりません。

上記サイトで読み込みの作業では何をやっているのでしょうか。
データを開いて、バッファに記録する、という所までは分かるのですが、X,Yに入れる作業の意味が理解できません。
ヒントだけでもご教授頂けるとありがたいです。

zwi

Re:マップファイルの読み込み

#2

投稿記事 by zwi » 16年前

まず、2バイトバッファに溜め込んでます。これはOKですか?
for(int i = 0 ; i < 2 ; i++)
	{
		if(FileRead_read(&buf, sizeof(BYTE), fh) == -1)
		{
			MB("マップチップデータファイル読み込みに失敗しました。");
			FileRead_close(fh);	//ちゃんとファイルを閉じる
			return false;
		}
	}

続いて
map.data_x_num = ((buf[1] & 0xff) << 8) | (buf[0] & 0xff);
で2バイトの数値に変換して、map.data_x_numに代入しています。
map.data_y_numも同様です。

4バイトにするなら、状況の処理を4バイトにするだけです。
for(int i = 0 ; i < 4 ; i++)

map.data_x_num = ((buf[3] & 0xff) << 24) |((buf[2] & 0xff) << 16) |((buf[1] & 0xff) << 8) | (buf[0] & 0xff);
って感じです。
私としては、あんまり好きな処理では無いですが。

belve

Re:マップファイルの読み込み

#3

投稿記事 by belve » 16年前

回答ありがとうございますm(__)m

4バイト分並んでるから、シフトさせてビット演算でひとつにまとめてるという事ですよね。
何となく理解できた気がします。ありがとうございました。

ところで、あまり好きな処理ではないという事はほかにもっと良い処理があったりするのでしょうか。
自分では思いつきもしません。。

バグ

Re:マップファイルの読み込み

#4

投稿記事 by バグ » 16年前

共用体を使うと分かり易いかもしれませんね。

バグ

Re:マップファイルの読み込み

#5

投稿記事 by バグ » 16年前

こんな感じかな?
#include <stdio.h>

union DWORD
{
	unsigned char byte[4];	// ※unsigned char型が1byteの環境とする
	unsigned long dword;	// ※unsigned long型が4byteの環境とする
};

int main(void)
{
	DWORD data;
	for (int i = 0; i < 4; ++i) data.byte = 255;
	printf("%u\n", data.dword);
	return 0;
}

belve

Re:マップファイルの読み込み

#6

投稿記事 by belve » 16年前

共用体ってそういう使い方が出来たんですか。今まで聞いたことはありましたが、よく分からなかくて使ったことはなかったです^^;

長いスクリプトがすっきりしそうです。ありがとうございました。m(__)m

GPGA

Re:マップファイルの読み込み

#7

投稿記事 by GPGA » 16年前

memcpyやキャストでやる方法もあります。

#include <stdio.h>
#include <string.h>

int main() {
	unsigned char c[/url] = { 0x12, 0x34, 0x56, 0x78 };
	unsigned int n;

	memcpy(&n, c, sizeof(n));
	printf("%x\n", n);

	n = *(unsigned int*)c;
	printf("%x\n", n);
}
 

belve

Re:マップファイルの読み込み

#8

投稿記事 by belve » 16年前

色々ありがとうございます。
ポインタとかもあまり使わないのですが、使い方をしっかり覚える必要がありそうです^^;

全く関係ないのですがPlatinumでマップチップを2バイトモードで使った際に、1行目が埋まらずに画像が次の行に行くので、エディタの画像番号がプログラムで分割読み込みした際の番号と合わなくなってしまうのですが、他の使っている方はどのようにしているのでしょうか。
ググったりしたのですが、そのような事を思う方もいないようなので相当初歩的な事を見落としてるのかもしれませんけど;;

Justy

Re:マップファイルの読み込み

#9

投稿記事 by Justy » 16年前


>マップチップを2バイトモードで使った際に、1行目が埋まらずに画像が次の行に行くので、
>エディタの画像番号がプログラムで分割読み込みした際の番号と合わなくなってしまうのですが

 ?
 何がどう合わないんでしょうか??



>他の使っている方はどのようにしているのでしょうか

 多分サンプルの CFmfMapクラスをそのまま使ってるんじゃないでしょうか。
 あれを使えば自分でマップファイルの解析ルーチンを作る必要はなくなりますので。

belve

Re:マップファイルの読み込み

#10

投稿記事 by belve » 16年前

やはりサンプルを使ってたのですか。

WINAPIは分からないからDXライブラリでやろうと思っていたのですが、なんとか自己解決できました。
色々とお騒がせして申し訳ありません。

回答ありがとうございましたm(__)m

閉鎖

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