ページ 11

龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 15:52
by COFE
龍神録の館をひと通り読み、前回の質問でボスを簡単に動かす関数まで作っていただきました

なので、自分なりに弾幕作ったりしてひとつのゲームになるようにしようとしているのですが、ある時からbossのshot(boss_shot.bullet[]に登録される弾)の当たり判定が無くなってしまいました
しかしenemyのshot[].bullet[]の当たり判定はあります
ベースはproject.zipの26章で、当たり判定を司るout.cppやmain関数から呼び出すout_main関数は全くいじらずに解凍したものそのまま使用しています

そんなのもう一回26章改造して作れよw、と思われるかもしれませんがなんかこのままでは気持ち悪いです
完全に自分語りになりますが将来プログラマーになりたいです、なのにバグが出たからってdixqさんの作った雛形でまたコピってやるようではなんというか勉強にならないような気がします
なのでどうしても当たり判定が働かない理由が知りたいです
前にsoftyaさんが教えてくれたAllocConsole関数とか使ってバグの原因を探ってみたのですが、全然分かりません
何故動かないかのヒントか何かいただけないでしょうか
よろしくお願いします

Re: 龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 16:25
by softya(ソフト屋)
少なくとも、ボスショットの当たり判定の確認用としては取得している情報が余りにも少ないです。
当たり判定関数の中にまで踏み込んで当たり判定の処理の数値を確認すべきだと思いますけど。

Re: 龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 16:43
by COFE
ああ、すいません
別に数値の流れを観察したのはboss_shot.flagだけでなく、outの方でreturn 1になっているかとか他のことも色々調べました
少なすぎるというか、いろいろ観察した結果後調べてないのはコレしか無いよなと思ってboss_shot.flagを一番最後に調べただけです

Re: 龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 17:00
by softya(ソフト屋)
COFE さんが書きました:ああ、すいません
別に数値の流れを観察したのはboss_shot.flagだけでなく、outの方でreturn 1になっているかとか他のことも色々調べました
少なすぎるというか、いろいろ観察した結果後調べてないのはコレしか無いよなと思ってboss_shot.flagを一番最後に調べただけです
当たり判定の奥深い部分で当たりをはじく前後の情報を取得してみてください。

Re: 龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 17:21
by COFE
どうやらboss_shot.flag==1の時は当たり判定を実際に計算するout_judge関数が呼び出せてないようです
もう少し色々調べてみます

Re: 龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 17:28
by softya(ソフト屋)
こういうバグは、ちゃんと動作している部分からだんだん奥深い部分を確認していてって何処で呼び出しが無くなるとかif文の何処ではじかれているか確認すると良いです。
場合によってはif文を単一条件に分解して調べたりしてみても良いでしょう。
参考。こんな感じで。
int cond1 = x1 < x2;
int cond2 = y1 < y2;
printf( "条件:%s %s\n", cond1?"TRUE","FALSE", cond2?"TRUE","FALSE" );
if( cont1 && cond2 ) {

Re: 龍神録26章を改造したら当たり判定が無くなってしまった……

Posted: 2011年7月16日(土) 17:34
by COFE
原因が分かりました
オリジナルの弾幕作るときにboss_shot.cppの21行目boss_shot.bullet.cnt++;をコメントアウトしていたのが原因でした
しかもオリジナルの弾幕はコレがコメントアウトされてようがなかろうがちゃんと動作するという代物で……
バグなんて原因が分かってみると、なーんだって感じですね
softyaさんありがとうございました