ページ 1 / 1
横スクロールアクションゲームにおける消滅した敵の再出現のアルゴリズムについて
Posted: 2009年5月18日(月) 04:11
by けんたろうちゃん
横スクロールタイプの2Dアクションゲームを製作していますが、題名のアルゴリズムが思いつかず質問させてもらいます。
マリオ(3以降)やロックマンでは、進行上にいた敵が消滅しても、逆方向に戻ると復活しますよね。
この再現方法について教えてもらいたいです。
現在、画面上の敵の管理をSTLのlistで実現しており、新しい敵の出現は、そのlistに敵オブジェクトを投入という感じでやっています
ステージごとの敵の発生ポイントをtxtやcsvファイルに記録して、そこから読み出しで行おうと思っています
イメージとしては
敵1、座標(x,y)で
敵1、座標(x,y)で
敵2、座標(x,y)で
・・・・・・
のような感じです
これを上のようなことが可能なようにしたいのですが、うまい方法が思いつきません・・・
どなたか、教えてもらえませんか?
今、自分が考えている方法として、敵の発生について全てフラグを用意し、
敵A(座標(x、y)で発生)が消滅したら敵A(座標(x、y)で発生)を画面スクロールによる発生をONにする、といったものを考えています
しかし、これを綺麗にまとめることができない状態です・・・
非常にわかりにくい説明ですいません
一応簡単な図もつけておきました
Re:横スクロールアクションゲームにおける消滅した敵の再出現のアルゴリズムについて
Posted: 2009年5月18日(月) 12:12
by GPGA
1.敵キャラクターそれぞれに固有のIDを付ける
2.敵の発生位置に達した時に、その敵のIDが既に発生しているかどうかを確認する。
3.発生していれば何もせず、発生していなければ発生させる。
以下プログラム
#include <vector>
#include <list>
#include <algorithm>
// 敵出現データ
struct EnemyAppearance {
int type; // 敵のタイプ
int x; // 敵の出現X座標
};
std::vector<EnemyAppearance> g_EnemyAppearance; // csvファイルから読み込む
// 敵のデータ
struct EnemyData {
int id; // 固有ID
int type; // 敵のタイプ
・・・ // その他データ
};
std::list<EnemyData> g_EnemyData; // ゲーム内の敵情報
int g_nScrollX, g_nScrollXBack; // 現在のスクロール座標と、1フレーム前のスクロール座標
// IDサーチ用のクラス
class CheckAppearance {
int id_;
public :
CheckAppearance(int id) : id_(id){}
bool operator ()(EnemyData data) {
return data.id == id_;
}
};
// 敵の出現チェック
void EnemyAppearanceCheck() {
// g_EnemyAppearanceは、csvからデータを読み込んだものとする
// 固有IDはg_EnemyAppearanceのインデックスを使用する
for (unsigned int i = 0; i < g_EnemyAppearance.size(); ++i) {
if (g_EnemyAppearance.x <= g_nScrollX &&
g_EnemyAppearance.x >= g_nScrollXBack) {
// 敵出現領域に入った場合
std::list<EnemyData>::iterator it;
#if 1
// std::find_ifを使用した場合のIDサーチ
CheckAppearance checkAppearance(i);
it = std::find_if(g_EnemyData.begin(), g_EnemyData.end(), checkAppearance);
#else
// 普通にイテレータを回した場合のIDサーチ
for (it = g_EnemyData.begin(); it != g_EnemyData.end(); ++it) {
if (it->id == i) {
break;
}
}
#endif
if (it == g_EnemyData.end()) {
// 出現位置に入った敵がまだ発生していないので、発生させる
EnemyData data;
data.id = i;
data.type = g_EnemyAppearance.type;
g_EnemyData.push_back(data);
}
}
}
}
Re:横スクロールアクションゲームにおける消滅した敵の再出現のアルゴリズムについて
Posted: 2009年5月19日(火) 00:38
by けんたろうちゃん
丁寧にコードつきでありがとうございます
非常に助かりました