おはようございます。
2、3日前に、2面以降の作り方について聞いたものですが、過去ログ等を見ても分からない事があったので質問します。
現在作っている超絶お試しSTGも2面作りに成功したので、現在は絵を描いたり、タイトル画面作ったり、残機やボムの上限などの、プログラムの館で紹介しきれていない所をボチボチ搭載しています。
そこで出てきた問題ですが、
1つ目は、
『ボス(中ボス含む)の弾幕で死んで(ゲームオーバー)からタイトルに戻って、再度1面からやり直した場合、何故かボスが放っていた弾幕が画面に(停止状態で)残ってしまっている』
2つ目、
『2面やタイトルに戻った時も、1面の音楽が止まらず、2重に音楽がかかってしまう』
1つ目は、雑魚敵の弾幕で死んでやり直した場合は残らないのですが、ボスの弾幕で死んでやり直した場合、何故か死んだ時に画面に表示されていた弾幕が、停止状態で表示されてしまいます。
2つ目は、単純に音楽の止め方がイマイチ分かりません。
ini.ccpの中で音楽の初期化もしてありますし、
駄目もとで、area.bgm.flag=0;や=2;などをmain.ccpのcase文に入れて見ましたが、それでも止まりませんでした。
2つともゲームタイトルを作る前から発生していた問題なので、タイトルは関係ないと思われます。
この問題、両方ともini.ccpで初期化されている内容のハズ(ですよね?)なのに何故、初期化されていないのでしょう?
1つ目はともかく、2つ目はゲームとして確実に問題があるので、どうか解決策をお願いします。
ボス弾幕の謎と音楽の止め方
Re: ボス弾幕の謎と音楽の止め方
main.ccpのcase文載せます。
codeの使い方があってるか不安……
while(ProcessLoop()==0){//メインループ
music_ini();
switch(func_state){
case 0://タイトル
G_title();//ゲームタイトル表示
area.bgm.flag=0;
if(CheckStatePad(configpad.shot)==1)//Zキーが押されたらスタート
func_state=10;
break;
case 10://初回のみ入る処理
load(); //データロード
first_ini();//初回の初期化
func_state=99;
break;
case 98://2面初期化
area.bgm.flag=0;
snd_ini();//←2回目の初期化。ここはmemset(&ch,0,sizeof(ch_t));と初期残機・ボム数の文のみ削除。
load_story2();//2面読み込み
func_state=110;//2面スタート
break;
case 99://STGを始める前に行う初期化
ini();
load_story();
func_state=100;
break;
case 100://通常処理
enter_func_tm("最初");
calc_ch(); enter_func_tm("キャラ計算");
ch_move(); enter_func_tm("キャラ移動");
cshot_main(); enter_func_tm("自機ショットメイン");
enemy_main(); enter_func_tm("敵処理メイン");
boss_shot_main();enter_func_tm("ボスショットメイン");
shot_main(); enter_func_tm("ショットメイン");
out_main(); enter_func_tm("当たり判定");
effect_main(); enter_func_tm("エフェクトメイン");
calc_main(); enter_func_tm("計算メイン");
graph_main(); enter_func_tm("描画メイン");
bgm_main(); enter_func_tm("BGMメイン");
if(boss.flag==0)
stage_count++;
if(stage_count==3000)//カウント3000で2面の初期化へ
func_state=98;
if(ch.num==0)//残機ゼロなら
func_state=0;//タイトルへ
break;
case 110://通常処理
enter_func_tm("最初");
calc_ch(); enter_func_tm("キャラ計算");
ch_move(); enter_func_tm("キャラ移動");
cshot_main(); enter_func_tm("自機ショットメイン");
enemy_main(); enter_func_tm("敵処理メイン");
boss_shot_main();enter_func_tm("ボスショットメイン");
shot_main(); enter_func_tm("ショットメイン");
out_main(); enter_func_tm("当たり判定");
effect_main(); enter_func_tm("エフェクトメイン");
calc_main(); enter_func_tm("計算メイン");
graph_main(); enter_func_tm("描画メイン");
bgm_main(); enter_func_tm("BGMメイン");
if(boss.flag==0)
stage_count++;
if(ch.num==0)//残機ゼロなら
func_state=0;//タイトルへ
break;
default:
printfDx("不明なfunc_state\n");
break;
}
codeの使い方があってるか不安……
Re: ボス弾幕の謎と音楽の止め方
もし可能であれば、プロジェクト全体を(あぷろだなどに)アップロードしていただけないでしょうか?
あぷろだの例:http://www.axfc.net/uploader/
あぷろだの例:http://www.axfc.net/uploader/
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: ボス弾幕の謎と音楽の止め方
> 『ボス(中ボス含む)の弾幕で死んで(ゲームオーバー)からタイトルに戻って、再度1面からやり直した場合、何故かボスが放っていた弾幕が画面に(停止状態で)残ってしまっている』
これは弾の初期化・終了処理をしていないからです。
弾幕を終了する時には毎回必ず弾情報の初期化をするようにして下さい。
とりあえずすべての弾のフラグを落とせばこのようなことは無くなると思います。
> 『2面やタイトルに戻った時も、1面の音楽が止まらず、2重に音楽がかかってしまう』
音楽をとめていないからでしょう。
どのような関数で鳴らしているか解りませんが、DXライブラリのHPのリファレンスを見れば止め方が書いてあります。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
これは弾の初期化・終了処理をしていないからです。
弾幕を終了する時には毎回必ず弾情報の初期化をするようにして下さい。
とりあえずすべての弾のフラグを落とせばこのようなことは無くなると思います。
> 『2面やタイトルに戻った時も、1面の音楽が止まらず、2重に音楽がかかってしまう』
音楽をとめていないからでしょう。
どのような関数で鳴らしているか解りませんが、DXライブラリのHPのリファレンスを見れば止め方が書いてあります。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
Re: ボス弾幕の謎と音楽の止め方
みけCATさん
うpしてみました。
http://www1.axfc.net/uploader/N/so/118928
passは「x-555」です。
龍神録の50章改が元になっています。
素材を龍神録のモノに戻したり、タイトル画像を消しましたが、問題なく問題は発生している(?)ので変わりはないはずです。
最初の画面は暗いですが、Zキーを押すとステージが始まります。
後、1面はデバックのために1000カウントで移動するようになってます(ようは変え忘れたままあげてしまった。
管理人さん
ありがとうございます。
いろいろ試行錯誤してみます。
>どのような関数で鳴らしているか解りませんが
ソースそのままなので、龍神録の再生法と変わらないハズです。
うpしてみました。
http://www1.axfc.net/uploader/N/so/118928
passは「x-555」です。
龍神録の50章改が元になっています。
素材を龍神録のモノに戻したり、タイトル画像を消しましたが、問題なく問題は発生している(?)ので変わりはないはずです。
最初の画面は暗いですが、Zキーを押すとステージが始まります。
後、1面はデバックのために1000カウントで移動するようになってます(ようは変え忘れたままあげてしまった。
管理人さん
ありがとうございます。
いろいろ試行錯誤してみます。
>どのような関数で鳴らしているか解りませんが
ソースそのままなので、龍神録の再生法と変わらないハズです。
Re: ボス弾幕の謎と音楽の止め方
ボスが放った弾幕が残る件については、ini関数とsnd_ini関数の最初のmemsetのあたりに
を追加してみたらどうですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)