などのマップデータは以下の様なものをマップエディタで作ればOKでした。
/*1が地面で0がなんもない所*/
int MAP[MAX_SIZE]=
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
ですが、回転したり、上下移動したり、『動く』ギミックは上記のやり方では難しいです。
なのでひとまず、『動かない地面データ』と『動く床などのギミックデータ』に分けようと思ったんですが、
そのギミックデータをどういった形で作ればいいか、いまいちわかりません。
以下の様にひとまずは考えたのですが、動くギミックを作るのが初めてという事もあり、果たしてこれが正しいのかどうか不安なので、よければ確認お願いします。
①ギミック構造体を作り、それを二次元配列で宣言。
そんな『ギミックデータ』と『地面データ』を作るマップエディタを作る。
/*ギミックの種類の列挙たい*/
enum{
MOVE_FLOOR, //動く床
GURUGURU_FLOOR,//回転床
};
//ギミック構造体
struct Gimmick{
int type;//ギミックの種類
int point_status;//ギミックの配置データ
/*他にも必要な各ギミックの共通要素の変数を書いたりするかも*/
};
Gimmick gim[MAX_SIZE];
ゲーム本体内に、ギミックの種類に合わせてそのギミックの動きを処理する関数を作る。 ③当たり判定はトップビュー、クォータビューの場合は、地面は新c言語の『いけない所を作る』と同じ、
0はいけない所というシンプルな当たり判定でいいが、
動くギミックは『動くので』キャラと同じような矩形の判定など、別の当たり判定を用いる必要がある?
少なくとも同じ当たり判定では成り立たないので、ギミックと地面で、それぞれ違う当たり判定にしなければならない。
④結論として、『地面データ』『ギミックデータ』『地面の当たり判定データ』『ギミックの当たり判定データ』の四つのデータを作る
マップエディタとそれらのデータを読み込み、処理する関数をゲーム本体に作らなければならない。
今手元にトップビューのマップエディタがあります。
それは地面をクリックで置き、その置かれた位置を二次元配列のデータとして、マップデータを作る、シンプルなマップエディタです。
とりあえずこれを上記の考えを元に改良していこうと思うのですが、
どうでしょう?
アドバイス、意見お願いします。
特に当たり判定関連が悩みなので(どんな当たり判定にするかなど)、みなさんならどうするか教えてください。