ページ 11

弾幕の管理について

Posted: 2009年7月07日(火) 21:55
by ひよこ
龍神録の改造でSTGを作っているのですが、
龍神録の館には下のようなものがあるのですが、
//func.cpp
void (*boss_shot_bullet[DANMAKU_MAX])() =
{
//中ボス
				boss_shot_bulletH000,//ノーマル
				boss_shot_bulletH002,//スペル~パーフェクトフリーズ~
			//ラスボス
				boss_shot_bulletH001,//ノーマル~サイレントセレナ~
				boss_shot_bulletH004,//スペル~ケロちゃん~
				boss_shot_bulletH009,//スペル~反魂蝶~
			//終り
				boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)};
}
たくさんステージを作りたいので
自分はわかりやすくswitch文を使って
書いたのですがエラーが出ます。
void (*boss_shot_bullet[DANMAKU_MAX])() =
{
	switch(stage){
			case 0:
			//中ボス
				boss_shot_bulletH000,//ノーマル
				boss_shot_bulletH002,//スペル~パーフェクトフリーズ~
			//ラスボス
				boss_shot_bulletH001,//ノーマル~サイレントセレナ~
				boss_shot_bulletH004,//スペル~ケロちゃん~
				boss_shot_bulletH009,//スペル~反魂蝶~
			//終り
				boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
			break;
			
			case 1:
			//中ボス
				boss_shot_bulletH012,//ノーマル
				boss_shot_bulletH013,//スペル~パーフェクトフリーズ~
			//ラスボス
				boss_shot_bulletH014,//ノーマル~サイレントセレナ~
				boss_shot_bulletH005,//スペル~ケロちゃん~
				boss_shot_bulletH003,//スペル~反魂蝶~
			//終り
				boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
				break;
	}
};
どうすればいいでしょうか?なぜそうなるのでしょうか?

Re:弾幕の管理について

Posted: 2009年7月07日(火) 22:14
by 通りすがり
関数ポインタについて調査したほうが良いです。

ttp://www.geocities.jp/ky_webid/c/043.html

Re:弾幕の管理について

Posted: 2009年7月07日(火) 22:17
by MNS
代入しようとしているデータの中に、
制御構文などは埋め込めないのではないでしょうか?
(というか、埋め込めないはずです)

ですので、switch文を外に持ってくるなどのアプローチをとってみてはどうでしょう?
(ただし、配列に対して一括に代入することは出来なくなるかも知れませんが。

Re:弾幕の管理について

Posted: 2009年7月07日(火) 23:01
by ひよこ
ただいま勉強しながら試行錯誤中なのですが、
コンパイルしたら次のようなエラーが出ました。
関数定義のようですが、パラメータ リストがありません。外見上の本体をスキップします。
どういう意味なのでしょうか?

Re:弾幕の管理について

Posted: 2009年7月07日(火) 23:47
by ねこ
どう修正したのか分からないのですが、switch使おうとしてる点から何か妙な処理をしてるんじゃないかなと。
エラーの意味は検索したらMSのヘルプ出たのでそのへん見てみてください。

処理についてですが関数ポインタの配列に関数突っ込んでるだけなので、
ステージの都度配列の中を入れ替えてあげれば良いんじゃないでしょうか?
よーく見ると int a[3] = { 0, 1, 2 };とほぼ同じ事してるんですよ。

Re:弾幕の管理について

Posted: 2009年7月08日(水) 06:47
by ひよこ
おはようございます。
int a[3] = { 0, 1, 2 };を見て考えたらできました。
通りすがりさん、MNSさん、ねこさん、ありがとうございました。