どうしても詰まってしまったのでちょっとお世話になりたいと思います。
現在、疑似3D弾幕STGを作っております。
あくまで疑似なので弾幕にZ座標とそれに対する拡大縮小を行っているだけですが。
で、本題ですがそれをテストプレイすると自分が何もしなければ、敵はちゃんと予定どうりの動きをしてくれるのですが、
いざ応戦しようと自分が弾を発射していると。敵が突然効果音だけを残し、後の弾を発射してくれなくなる時があります。
たぶん配列に変な値でも入っているんだろうな(そこが原因か分かりませんが)、と思いつつも自分ではどこがいけないかが
分かりませんでした。
自分の弾の発射数が多いほどこの症状が起きやすっくなっているようです。
どこがいけないか見当もつかないためこちらのアドレスにプロジェクトごと用意しました。
DLされた方は絶対に二次配布なされないようにお願いします。
http://island.geocities.jp/nznz3102/StD.lzh
操作方法を入れ忘れたのでここで
Z 武器変更
マウス左クリック 対応した武器の弾幕発射
プログラムはこのサイトの龍神録の館を参考に作られております。
かなり自分で改造を加えていますが…
お答えお待ちしております。よろしくお願いします。
ときどき登録されない敵弾幕
Re: ときどき登録されない敵弾幕
もうちょっとソースにコメントが欲しいかも・・
>敵が突然効果音だけを残し、後の弾を発射してくれなくなる時があります。
は、再現がなかなか難しくよくわからんです。確かにたまになります。
それとは別ですけど、たまにボスが生き残っているのに弾を発射しなくなる現象は、(仕様なのかは分からないですけど。)
boss.numが13なのにshot.flagが14しか立っていないのが原因かも。
仕様だったら申し訳ない。
>敵が突然効果音だけを残し、後の弾を発射してくれなくなる時があります。
は、再現がなかなか難しくよくわからんです。確かにたまになります。
それとは別ですけど、たまにボスが生き残っているのに弾を発射しなくなる現象は、(仕様なのかは分からないですけど。)
boss.numが13なのにshot.flagが14しか立っていないのが原因かも。
仕様だったら申し訳ない。
Re: ときどき登録されない敵弾幕
ゆーずぃさん、お返事有難う御座います。
ボスの弾幕についても仕様ではなく、途中で途切れることに悩まされていました。
よろしければ、詳しく教えてもらえないでしょうか?
ボスの弾幕についても仕様ではなく、途中で途切れることに悩まされていました。
よろしければ、詳しく教えてもらえないでしょうか?
Re: ときどき登録されない敵弾幕
コードをざっと見たのと自分の経験なのですが、
BulletMaxの定義値が小さすぎるため、
shot_search()関数ではじかれているのではないでしょうか?
見当違いでしたらすみません。
BulletMaxの定義値が小さすぎるため、
shot_search()関数ではじかれているのではないでしょうか?
見当違いでしたらすみません。
Re: ときどき登録されない敵弾幕
本当に見当違いでした。
何のバグかすら良く分かっていなかったようです・・・
ボスがなぜか飛び去ってしまう現象ですよね。
横スレの上、誤解を招く発言、大変失礼いたしましたorz
何のバグかすら良く分かっていなかったようです・・・
ボスがなぜか飛び去ってしまう現象ですよね。
横スレの上、誤解を招く発言、大変失礼いたしましたorz
Re: ときどき登録されない敵弾幕
原因はまだ分かりませんが、DxLib_End関数が呼ばれていません。
これはマズイと思いますよ。
これはマズイと思いますよ。
Re: ときどき登録されない敵弾幕
ご指摘有難う御座います。
ビルドしては右上の☓でプログラムを終了させることを繰り返していたので気にも留めていませんでした。
ゲームの基本的な流れが出来てなくては話になりませんね…
ビルドしては右上の☓でプログラムを終了させることを繰り返していたので気にも留めていませんでした。
ゲームの基本的な流れが出来てなくては話になりませんね…
Re: ときどき登録されない敵弾幕
以前とんでもない勘違いをした者です。
リベンジということで再来しました。
この部分でボス登録なされているようなんですが、
一度ゲームオーバーになったあとにenemy構造体が初期化されていないのか
デバッグでenemy.bossが1となるenemyが2匹いました。さらに片方はフラグが立っていなかったため、
if(enemy[boss.num].flag==0) boss.flag=0;
の部分でボスのフラグが落ちてしまっているようです。
リベンジということで再来しました。
if(boss.flag==0){
for(int i=0 ; i<EnemyMax ; i++ ){
if(enemy[i].boss==1){
boss.flag=1;
boss.num=i;
}
}
}
if(enemy[boss.num].flag==0) boss.flag=0;
一度ゲームオーバーになったあとにenemy構造体が初期化されていないのか
デバッグでenemy.bossが1となるenemyが2匹いました。さらに片方はフラグが立っていなかったため、
if(enemy[boss.num].flag==0) boss.flag=0;
の部分でボスのフラグが落ちてしまっているようです。
Re: ときどき登録されない敵弾幕
kimuchiさんお返事ありがとうございます。
これはまた改めて質問しようかなぁ、と思っていた内容なのですごく助かります。
とりあえずGfirst();の中にenemy.bossのみをすべて初期化する処理を入らたらとりあえず直りました。
たぶんもっといい方法があると思うので今はそれで代用しています。
これはまた改めて質問しようかなぁ、と思っていた内容なのですごく助かります。
とりあえずGfirst();の中にenemy.bossのみをすべて初期化する処理を入らたらとりあえず直りました。
たぶんもっといい方法があると思うので今はそれで代用しています。