ページ 11

マップに情報を持たせる方法を教えてください

Posted: 2013年2月10日(日) 17:39
by taketoshi
SRPGを作るために勉強しています。

今までマップはint型の構造体を用意してこのようにしていました
4,5,6などの数字に対応したマップチップを用意して表示させています。
また0以外の所はキャラクターが移動をできないようにしていました。

コード:


//4,5,6,7,8,9,10,11がキャラクタの移動を制限するための谷
int Block[4][25] ={4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
					7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,
					7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,
					7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,
					10,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9};

しかし、これだけではマップタイルの指定と、キャラクタが
通れるのか通れないのか位の情報しか持たせられないため
SRPGに必要な移動コストなどの要素を持たせたくて、構造体で記述し
その構造体を、配列にして情報を持たせてみました。

しかし初期化方法で悩んでいます。for文で回せば一括初期化は可能なのですが
int型の配列を用いているより、マップチップの配置が難しくて困っています
int型だと対応する数字を打ち込めばマップチップの配置ができたのですが
構造体の配列になったとたん、視覚的に配置ができなくなってしまいました。

何か良い方法はありませんか?

コード:

typedef struct mapdata{
	int nMaptipNum;//マップチップナンバー
	int nMoveCost;//そのマスの移動コスト
	bool bCharFlag;//敵キャラ及び味方キャラがいるかどうか
	int nEsqapeCost;//マップ特有の回避率
}mapdata;
int _tmain(int argc, _TCHAR* argv[])
{

	int x;
	int y;

	//ゼロで初期化
	mapdata map[25][25] = {0};

	//マップデータの初期化、はてマップチップの指定はどの様に・・・map[4][5] = 3とかだと日が暮れる・・・?
	for(x = 0;x < 25;++x){
		for(y = 0;y < 25; ++y){
			map[x][y].nMaptipNum = 0;
		}
	}

	return 0;
}



Re: マップに情報を持たせる方法を教えてください

Posted: 2013年2月10日(日) 18:09
by h2so5
そもそも「そのマスの移動コスト」、「敵キャラ及び味方キャラがいるかどうか」、「マップ特有の回避率」はマスごとに保持が必要な情報ですか?

「マスの移動コスト」は動的に変化しない限りはマップチップナンバーと移動コストの対応テーブルを用意すれば判断できますし、
「敵キャラ及び味方キャラがいるかどうか」はキャラクターの座標と照らし合わせれば分かりますし、
「マップ特有の回避率」ってマップごとに1つ持っていればいい情報ですよね。

Re: マップに情報を持たせる方法を教えてください

Posted: 2013年2月10日(日) 18:22
by softya(ソフト屋)
h2so5さんの言われるように、共有化出来るものは共有化を考える必要があります。
それに何でもかんでもマップデータに乗せるのはメンテナンス性からみても良いことではありません。

ちなみに大抵のゲームはマップエディタで情報を設定・作成するため、マップ情報はテキストあるいはバイナリデータでゲームプログラムは読み込んでいます。
やはり配列で扱うには複雑すぎるのとマップチップ番号と言う数値データだけで管理するのは無理がある & メンテナンス性が悪いためです。

マップエディタは下記のような汎用のものもありますが、こだわるには自作する必要が出てきます。
「Platinumの詳細情報 : Vector ソフトを探す!」
http://www.vector.co.jp/soft/win95/game/se231004.html

あるいは、公開されているゲームツールのエディタの機能やデータ構造を参考にするのも良いかと思います。
「ヒットポイント ウェブサイト」
http://www.hitpoints.net/cgi/topview.cgi?top.html

Re: マップに情報を持たせる方法を教えてください

Posted: 2013年2月10日(日) 18:38
by ジンセイ
マップエディタなら plutinum よりも Tiled Map Editor というツールをお薦めします。

「Tiled Map Editor」
http://www.mapeditor.org/

Re: マップに情報を持たせる方法を教えてください

Posted: 2013年2月10日(日) 18:44
by softya(ソフト屋)
ジンセイ さんが書きました:マップエディタなら plutinum よりも Tiled Map Editor というツールをお薦めします。

「Tiled Map Editor」
http://www.mapeditor.org/
たしかにこれは高機能そうです。

【追記】
試してみました。たしかに高機能でした。
こんなに高機能なのにマップのアニメの設定が無いのは不思議。見逃したんでしょうか。

Re: マップに情報を持たせる方法を教えてください

Posted: 2013年2月10日(日) 20:16
by taketoshi
皆様返信ありがとうございます。

構造体でマップ管理するというのは効率的ではないことがわかりました。
マップエディタを二つご提示いただきましたが、Platinumの方がとっつきやすそうなので
これの使い方を学習していきます。

Platinumを使ってマップロードを思考してみますのでひとまず解決とします。
また詰まったら教えてください。ありがとうございます。