シューティングゲームで

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
はね

シューティングゲームで

#1

投稿記事 by はね » 18年前

この前はお答えいただきありがとうございました。

また質問なのですが
今、シューティングゲームに付け足しでアイテムを出すようにしたいのですが、なかなか上手くできません。

敵を倒すとアイテムは出るのですが、時々死なない敵が出て困っています。

自分なりに追加した部分だけ、まとめて添付しておきますので暇な時にでも見てもらえないでしょうか
基本的にサイトにあるソースに添付ファイルにある内容を追加しているだけです。

ちなみに敵のhpも設定しましたが、
EnemyCalcDisp()で敵のフラグを立てる場所に
enemy.hp=1;
と敵それぞれに設定しています。

はね

言い忘れです

#2

投稿記事 by はね » 18年前

このバグ(?)は敵を複数画面に表示した際に起こるようです。

管理人

Re:言い忘れです

#3

投稿記事 by 管理人 » 18年前

すみません、明日早いので明日お返事します、ごめんなさい(_ _|||)

プログラムはみていないのですが、

>時々死なない敵が出て困っています。

ー>フラグを下げる処理が本当にその時そこを通っているか、その落としたフラグが本当にその本体のフラグか確認する。

ということをデバッカで確認するとよいかもしれません。。。
沢山あやしそうなところにブレイクポイントを置いてちまちま実行していくとか・・
と言うくらいの事はすでにやってますかね^^;
明日改めてお返事します(_ _)

管理人

Re:言い忘れです

#4

投稿記事 by 管理人 » 18年前

なるほど、

enemy.cpp

のファイルをそのまま見せてもらったらはっきりするんですが、

おそらく原因はコレじゃないかなと思います。

おそらく敵が消えないのは、あの赤い弾幕がくるっとまわる奴を発射する敵の時以降じゃないですか?

敵が出現する時の初期化部分を見てください。
switch(counter){
		case 50:
		case 350:
		case 650:
		case 950:
		case 1250:
		case 1550:
		case 1850:
		case 2150:
		case 2450:
			enemy.hp=1;			enemy.pattern=2; //どういう軌道を描くか
			enemy.flag=1;   //出現フラグを立てる
			enemy.counter=0;//出現して何カウント目か測るカウンター初期化
			enemy.size=0.5f;//敵の大きさ
			enemy.range=(int)((MONSTER1_X_SIZE-60)/2.0f*enemy.size); //※画像サイズから余白の部分60ピクセルを引く
			enemy.x=210.0;  //xの初期座標
			enemy.y=-10.0;  //yの初期座標
			break;
		case 3050:
		case 3350:
		case 3650:
			enemy.pattern=5; //どういう軌道を描くか
			enemy[i].flag=1;   //出現フラグを立てる
			enemy[i].counter=0;//出現して何カウント目か測るカウンター初期化
			enemy[i].size=0.5f;//敵の大きさ
			enemy[i].range=(int)((MONSTER1_X_SIZE-60)/2.0f*enemy[i].size); //※画像サイズから余白の部分60ピクセルを引く
			enemy[i].x=210.0;  //xの初期座標
			enemy[i].y=-10.0;  //yの初期座標
			break;


このように初期化されているんじゃないかと思います。
case 50:
case 350:
case 650:
case 950:
case 1250:
case 1550:
case 1850:
case 2150:
case 2450:
は、前半出てくる敵に関する初期化です。
case 3050:
case 3350:
case 3650:
こちらは後半出てくる敵に関する初期化です。
この両方で初期化しないといけませんが、両方で初期化していますか?
つまりcase3050:以降の初期化にenemy[i].hp=1;は書いていますか?

はね

Re:

#5

投稿記事 by はね » 18年前

あ、すみません。
敵の出るタイミングや行動パターンは自分なりに変えて作っています。
説明が足りませんでした。

デバッグはどうにも良くわからなくて、試してませんでしたorz

ちなみにswitch文ではhpは書いてありました。

テストプレイやりまくってわかったのですが、
次の敵が表示されない内に今表示されている敵を倒してしまうとバグるようです。

強引ですが、敵のhpを多くして敵が死ぬのを遅らせるのも1つかなぁ、と思ったりしています^^;

管理人

Re:

#6

投稿記事 by 管理人 » 18年前

なるほど、では全てのソースを見せていただかないとよくわからないですね;
プロジェクトごとアップしてもらえたらもしかしたら解決するかも・・。

はね

Re:

#7

投稿記事 by はね » 18年前

プロジェクトごとと言うことはbdpファイルやら色々入っているフォルダをupすれば良いのでしょうか?
またそれをupする時はzipの中に入れてupすれば良いんですかね?

分からないことだらけで申し訳ないですorz

ちなにBCCで制作しているのですが、問題無いですかね?

管理人

Re:

#8

投稿記事 by 管理人 » 18年前

コンパイラがVC++ではないのでしたらソースだけ入れたzipファイル渡していただけたらと思います。
こちらで環境作ってコンパイルしますんで。

アップローダ掲示板などを利用するか、HPをお持ちでしたらご自分のスペースにアップしていただくか、こちらにメール添付で送っていただけたらと思います。

はね

Re:遅くなりました

#9

投稿記事 by はね » 18年前

すみません、ちょっと色々あって遅くなりました。

ちゃんとダウンロードできるでしょうか?

時間ある時で結構ですので検証お願いします

管理人

Re:遅くなりました

#10

投稿記事 by 管理人 » 18年前

ScoreDisp
ItemCalcDisp
CollisionDetection2
など、探してもない関数がありますけど、これらはどこに書いてあるんでしょうか?

はね

Re:遅くなりました

#11

投稿記事 by はね » 18年前

ScoreDispはscore.cppに
ItemCalcDispとCollisionDetection2はitem.cppに
書いてあるはずなのですが、無いですかね?

管理人

Re:遅くなりました

#12

投稿記事 by 管理人 » 18年前

あら、前のファイルより増えていたんですね、すみません><;
みてみます。

管理人

Re:遅くなりました

#13

投稿記事 by 管理人 » 18年前

お書きになったプログラムの中で
CollisionDetection
の攻撃あたり判定の中の

if(enemy.hp==0&&EnemyItem.Item[d].flag==0){

の文が正しく行われていないようです。
enemy.hpが0に成った時、
EnemyItem.Item[d].flagが1であるときがあります。
この不具合を修正すれば直るでしょう。

はね

Re:遅くなりました

#14

投稿記事 by はね » 18年前

返答ありがとうございます。
と言うことはアイテムのフラグ関係の場所を直せば良いと言うわけですね^^
これを参考に直してみます。

色々とありがとうございました

管理人

Re:遅くなりました

#15

投稿記事 by 管理人 » 18年前

いえいえ、あの攻撃パターン面白かったですよ。
私の作ったヘッポコなサンプルでここまで盛り上げてくださってこちらも嬉しいです。
形になったら是非見せてください☆

閉鎖

“C言語何でも質問掲示板” へ戻る