いつもお世話になっております。
引き続き34章まで進めたのですが、ここでひどく躓きました。
色々と不具合があり、落としたプロジェクトを見ながら修正してきましたが、どうしてもわからない部分があったので質問させてください。
1.レーザーの当たり判定
34章のレーザーが始まり、当たり判定が発生し始める瞬間に、自機がどこにいても必ず被弾します。
ボムを使って出始めだけ凌げば、あとは設計通りの挙動を示すようです。
この当たり判定を、落としたプロジェクトの34章と同じように正しく動かしたいのですが、どのようにすればいいのか検討がつきません。
関係ありそうなout_lazer.cppやshot.cppもくまなくチェックしたつもりですが、どうしても直りません。
過去ログにも同じような質問がありましたが、具体的な回答は記載されていませんでした。
もし宜しければ、ご教授願えないでしょうか。
2.自作エフェクトが表示されない
敵雑魚が死ぬときに衝撃波を出すエフェクトを自作しました。
しかし、34章レーザーの作業を進めていくうちに、この衝撃波エフェクトが表示されていないことに気づきました。
いつから表示されていないのか正確には覚えていませんが、ボスを実装する前までは確実に表示されていました。
初期化、画像のロード、エフェクトの登録・計算・描画全てチェックしましたが、原因が見つかりません。
これについても、もしわかることがあれば教えてください。
3・ステージカウンタが少しだけ多く加算される
34章レーザーに取り掛かるまでは、決められたステージカウンタ丁度にボスが出現していました。
しかし、34章以降になると、例えばステージカウント600でボスが出るところを、何故か602で出現するようになりました。
大した影響はなさそうではありますが、気になります。
質問は以上の3つになります。
ちなみに、自分で追加した要素として
・メニュー、自機・武装選択(機体2種、武装各2種の計4種類で、それぞれ少しずつ設定やショット、ボムなどを変えてあります)
・先述の衝撃波エフェクト他、オリジナルのボム2種類
・サンプルプログラムにあった、川のきらめきを再現する背景
・スクロール速度を通常のカウントよりも遅くできる関数
などがあります(思い出せないだけで他にもあるかもしれません)。
それぞれシステムにあまり干渉しないように心がけてきたつもりではありますが、何か変なことになっているのかもしれません。
自分で改造したプロジェクトは以下UPLにうpしました。
http://www.dotup.org/uploda/www.dotup.org6134.lzh.html
pass:ryujin
環境はXPでVC++2008EEです。
とにかく何か思い当たることなどありましたら、是非教えてください。
よろしくお願い致します。
龍神録34章について 他
Re:龍神録34章について 他
>1.レーザーの当たり判定
>34章のレーザーが始まり、当たり判定が発生し始める瞬間に、自機がどこにいても必ず被弾します。
これは私もなりました。
当時いろいろ調べてみたんですが原因がわかりませんでした。
今調べてみると、当たり判定が発生し始めた時、shot.cppにあるlazer_calc関数の「あたり範囲を設定」のところで
lazer.haba*lazer.hantei
と
lazer.length*lazer.hantei
の計算が0になって、全体の計算結果がx,yそれぞれ同じ値になっているようです。
lazer.haba、lazer.hantei、lazer.lengthの値はそれぞれ
30.000000000000000、0.50000000000000000、240.00000000000000
となっていたので0にはならないと思うんですが…
一応out_lazer.cppのhitjudge_square_and_circle関数内の「長方形の中に物体が入り込んでいるかどうかを判定」のところで
if(0<=theta && theta<=PI/2 && 0<=theta2 && theta2<=PI/2)
を
if(0<theta && theta<=PI/2 && 0<theta2 && theta2<=PI/2)
とすれば、被弾しないようになると思います。
>2.自作エフェクトが表示されない
out.cppでenter_shockwave関数を呼んでいないからではないでしょうか。
enemy_death_judge関数のenter_del_effect(s);の上か下あたりでenter_shockwave(s);とすれば表示されると思います。
>3・ステージカウンタが少しだけ多く加算される
boss_shot.cppのboss_shot_main関数で
>if(stage_count==boss.appear_count[0]+2 && boss.flag==0){//開始時間なら
となっているので赤字を取り除けば600でボスが出てくると思います。
>34章のレーザーが始まり、当たり判定が発生し始める瞬間に、自機がどこにいても必ず被弾します。
これは私もなりました。
当時いろいろ調べてみたんですが原因がわかりませんでした。
今調べてみると、当たり判定が発生し始めた時、shot.cppにあるlazer_calc関数の「あたり範囲を設定」のところで
lazer.haba*lazer.hantei
と
lazer.length*lazer.hantei
の計算が0になって、全体の計算結果がx,yそれぞれ同じ値になっているようです。
lazer.haba、lazer.hantei、lazer.lengthの値はそれぞれ
30.000000000000000、0.50000000000000000、240.00000000000000
となっていたので0にはならないと思うんですが…
一応out_lazer.cppのhitjudge_square_and_circle関数内の「長方形の中に物体が入り込んでいるかどうかを判定」のところで
if(0<=theta && theta<=PI/2 && 0<=theta2 && theta2<=PI/2)
を
if(0<theta && theta<=PI/2 && 0<theta2 && theta2<=PI/2)
とすれば、被弾しないようになると思います。
>2.自作エフェクトが表示されない
out.cppでenter_shockwave関数を呼んでいないからではないでしょうか。
enemy_death_judge関数のenter_del_effect(s);の上か下あたりでenter_shockwave(s);とすれば表示されると思います。
>3・ステージカウンタが少しだけ多く加算される
boss_shot.cppのboss_shot_main関数で
>if(stage_count==boss.appear_count[0]+2 && boss.flag==0){//開始時間なら
となっているので赤字を取り除けば600でボスが出てくると思います。
Re:龍神録34章について 他
>pookaさん
ご指摘頂いた箇所を直すと、確かにちゃんと動くようになりました。
1.は不思議ではありますが、とりあえずこれで先に進みたいと思います。
34章は直さなくてもちゃんと動くのに…
2.はうっかりミスですね。
以後は登録にも気をつけたいと思います。
3.も原因がわかってすっきりしました。
ただ、34章もよく見るとカウントが+2されてますね…意図がわかりませんが、とりあえず置いておこうと思います。
的確なご指導、本当にありがとうございました。
これからも精進致します。
ご指摘頂いた箇所を直すと、確かにちゃんと動くようになりました。
1.は不思議ではありますが、とりあえずこれで先に進みたいと思います。
34章は直さなくてもちゃんと動くのに…
2.はうっかりミスですね。
以後は登録にも気をつけたいと思います。
3.も原因がわかってすっきりしました。
ただ、34章もよく見るとカウントが+2されてますね…意図がわかりませんが、とりあえず置いておこうと思います。
的確なご指導、本当にありがとうございました。
これからも精進致します。