ページ 1 / 1
シューティングゲームで
Posted: 2007年4月01日(日) 23:29
by はね
この前はお答えいただきありがとうございました。
また質問なのですが
今、シューティングゲームに付け足しでアイテムを出すようにしたいのですが、なかなか上手くできません。
敵を倒すとアイテムは出るのですが、時々死なない敵が出て困っています。
自分なりに追加した部分だけ、まとめて添付しておきますので暇な時にでも見てもらえないでしょうか
基本的にサイトにあるソースに添付ファイルにある内容を追加しているだけです。
ちなみに敵のhpも設定しましたが、
EnemyCalcDisp()で敵のフラグを立てる場所に
enemy.hp=1;
と敵それぞれに設定しています。
言い忘れです
Posted: 2007年4月01日(日) 23:43
by はね
このバグ(?)は敵を複数画面に表示した際に起こるようです。
Re:言い忘れです
Posted: 2007年4月02日(月) 01:09
by 管理人
すみません、明日早いので明日お返事します、ごめんなさい(_ _|||)
プログラムはみていないのですが、
>時々死なない敵が出て困っています。
ー>フラグを下げる処理が本当にその時そこを通っているか、その落としたフラグが本当にその本体のフラグか確認する。
ということをデバッカで確認するとよいかもしれません。。。
沢山あやしそうなところにブレイクポイントを置いてちまちま実行していくとか・・
と言うくらいの事はすでにやってますかね^^;
明日改めてお返事します(_ _)
Re:言い忘れです
Posted: 2007年4月02日(月) 21:47
by 管理人
なるほど、
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:
Posted: 2007年4月03日(火) 16:14
by はね
あ、すみません。
敵の出るタイミングや行動パターンは自分なりに変えて作っています。
説明が足りませんでした。
デバッグはどうにも良くわからなくて、試してませんでしたorz
ちなみにswitch文ではhpは書いてありました。
テストプレイやりまくってわかったのですが、
次の敵が表示されない内に今表示されている敵を倒してしまうとバグるようです。
強引ですが、敵のhpを多くして敵が死ぬのを遅らせるのも1つかなぁ、と思ったりしています^^;
Re:
Posted: 2007年4月03日(火) 18:04
by 管理人
なるほど、では全てのソースを見せていただかないとよくわからないですね;
プロジェクトごとアップしてもらえたらもしかしたら解決するかも・・。
Re:
Posted: 2007年4月03日(火) 20:55
by はね
プロジェクトごとと言うことはbdpファイルやら色々入っているフォルダをupすれば良いのでしょうか?
またそれをupする時はzipの中に入れてupすれば良いんですかね?
分からないことだらけで申し訳ないですorz
ちなにBCCで制作しているのですが、問題無いですかね?
Re:
Posted: 2007年4月03日(火) 21:02
by 管理人
コンパイラがVC++ではないのでしたらソースだけ入れたzipファイル渡していただけたらと思います。
こちらで環境作ってコンパイルしますんで。
アップローダ掲示板などを利用するか、HPをお持ちでしたらご自分のスペースにアップしていただくか、こちらにメール添付で送っていただけたらと思います。
Re:遅くなりました
Posted: 2007年4月04日(水) 00:27
by はね
すみません、ちょっと色々あって遅くなりました。
ちゃんとダウンロードできるでしょうか?
時間ある時で結構ですので検証お願いします
Re:遅くなりました
Posted: 2007年4月04日(水) 02:33
by 管理人
ScoreDisp
ItemCalcDisp
CollisionDetection2
など、探してもない関数がありますけど、これらはどこに書いてあるんでしょうか?
Re:遅くなりました
Posted: 2007年4月04日(水) 18:17
by はね
ScoreDispはscore.cppに
ItemCalcDispとCollisionDetection2はitem.cppに
書いてあるはずなのですが、無いですかね?
Re:遅くなりました
Posted: 2007年4月05日(木) 00:12
by 管理人
あら、前のファイルより増えていたんですね、すみません><;
みてみます。
Re:遅くなりました
Posted: 2007年4月05日(木) 00:50
by 管理人
お書きになったプログラムの中で
CollisionDetection
の攻撃あたり判定の中の
if(enemy.hp==0&&EnemyItem.Item[d].flag==0){
の文が正しく行われていないようです。
enemy.hpが0に成った時、
EnemyItem.Item[d].flagが1であるときがあります。
この不具合を修正すれば直るでしょう。
Re:遅くなりました
Posted: 2007年4月05日(木) 02:31
by はね
返答ありがとうございます。
と言うことはアイテムのフラグ関係の場所を直せば良いと言うわけですね^^
これを参考に直してみます。
色々とありがとうございました
Re:遅くなりました
Posted: 2007年4月05日(木) 03:24
by 管理人
いえいえ、あの攻撃パターン面白かったですよ。
私の作ったヘッポコなサンプルでここまで盛り上げてくださってこちらも嬉しいです。
形になったら是非見せてください☆