ページ 1 / 1
2Dマップについて
Posted: 2010年1月07日(木) 18:55
by アト
マップを描く
↓
キャラクタの位置を検索して描く
で下のように2Dマップを作っているのですが
(0が壁マップチップ(サイズ縦32,横32)、1が地面(32*32)、2が(48*32)、
3と4が木でどちらもサイズ32*32ですが4の上半分は透明であり、4は歩ける判定)
左の2の位置にキャラクタを置くとして、キャラクタの後ろの0のマップチップはキャラクタの透明な部分で0は表示されるのですが
右上の4の位置に行ってたとき4は木でなくキャラクタが表示されてしまいます。
これを改善するにはどうすればよいのでしょうか。
{ 0, 0, 0, 0, 0, 0, 0}
{ 0, 2, 1, 1, 1, 4, 0}
{ 0, 1, 1, 1, 1, 3, 0}
{ 0, 0, 0, 0, 0, 0, 0}
どうかよろしくお願いします。

Re:2Dマップについて
Posted: 2010年1月07日(木) 19:25
by softya
木がキャラクタの必ず上にくるなら後で書くのが良いでしょう。
つまり、
1.背景
2.キャラクタ
3.前景
の順番で描画するのです。
前景に該当するのは、4の木ですね。
ちなみに、木の後ろの地面があったりする場合は、背景の地面と前景の木は別データで持つ必要があります。
Re:2Dマップについて
Posted: 2010年1月07日(木) 21:37
by アト
softyaさんお返事ありがとございます。
つまり、地面、背景、前景の3つの配列と判定1つの配列が必要になるわけですか。
なかなか膨大なデータ量になりそうですね。
的確な答えで本当に助かりました。
Re:2Dマップについて
Posted: 2010年1月07日(木) 21:57
by softya
>地面、背景、前景の3つの配列と判定1つの配列が必要になるわけですか。
まず、地面と背景は兼用できますよ。
当たり判定も背景に持たせれば、背景と前景の合計2つの配列だけですね。
Re:2Dマップについて
Posted: 2010年1月07日(木) 22:07
by アト
softyaさんお返事ありがとうございます。
地面と背景は想像つきますが
それに当たり判定を背景に持たせるというのは
1から5まで歩ける判定、6以上は歩けない。
というような感じで移動処理に組み込めば良いのでしょうか?
Re:2Dマップについて
Posted: 2010年1月07日(木) 22:31
by softya
>1から5まで歩ける判定、6以上は歩けない。
>というような感じで移動処理に組み込めば良いのでしょうか?
もちろん、それでも出来ます。
でもそれは1~2面ぐらいマップが限度かと思います。
ゲームプログラミングの館のやり方はいったん置いておいて。
地形に関するデータは次のように定義出来ると思います。
・背景画像番号
・前景画像番号
・歩ける/歩けない
で、これを構造体にして歩ける/歩けないフラグで判定するのか、背景番号で歩けない歩けるを判断するのか、それはアトさんの考え方次第です。
構造体にすれば他の情報も持たせられますので地形アニメーションとかするときに便利でしょうが、マップ作成ツールが必要になってしまいます。
作ろうとしているゲームの種類とか、想定されるマップ数や広さそれらを考慮して考えないといけない事だと思います。
Re:2Dマップについて
Posted: 2010年1月07日(木) 23:09
by アト
softyaさんお返事ありがとうございます。
マップ作成ツールというものがあったのですか!
後で探してみようと思います。
構造体の定義の仕方についてなんですが
背景画像番号と前景画像番号は下のような感じだと思うんですけど
{0,0,0,0,0,0}
{0,1,1,1,1,0}
{0,0,0,0,0,0}
歩ける/歩かない
というのはどういう定義になるのか教えてもらえないでしょうか
勉強不足で申し訳ないです。
Re:2Dマップについて
Posted: 2010年1月07日(木) 23:58
by softya
>マップ作成ツールというものがあったのですか!
「マップエディタ」で探した方が良いでしょう。
Windowsアプリが作れるなら自分で作った方が勉強になりますけどね。
>歩ける/歩かない
>というのはどういう定義になるのか教えてもらえないでしょうか
地形に歩けない歩けるの情報は何処かに必要だと思いますよね。
で、最初のアトさんのマップは、地形番号がそのまま歩ける/歩けないのフラグになってます。
0,1,2,4が歩けて、3が歩けないんですよね?
その方法を止めて地形データ配列を構造体化して、地形情報自体に組み込んでしまうって話です。
typedef struct {
int bg_imgno; //背景画像番号
int fg_imgno; //前景画像番号
int stop_flag; //0なら歩ける,1なら歩けない。
} map_t;
こんな構造体ですね。
で、この構造体の初期化はマップエディタで作ったデータを読み込んで行いましょうって話です。
Re:2Dマップについて
Posted: 2010年1月08日(金) 01:13
by アト
softyaさんお返事ありがとうございます。
マップエディタを見てきたのですが(softyaさんの言っている場所かはわかりませんが)、
とても読み解いて自分のソースに組み込むのはできそうにありません。
紹介してもらって悪いのですが、とりあえず今の方法で頑張ってみようと思います。