ページ 11

【龍神録】スペルカードの制限時間実装

Posted: 2014年1月11日(土) 14:26
by amehirune
お久しぶりです。アメヒルネと申します。
ただ今、勉強と兼ねて、龍神録のサンプルソースを見たりいじったりしながら学んでいます。
(↑あくまで勉強用としてだけしか使ってません)

今回お尋ねしたいのは、「スペルカードの制限時間の実装」です。
以下、サンプルソース

コード:

//通常弾:ばらまき弾幕
void boss_shot_bulletH012(){
#define TM002 650
    int i,k,t=boss_shot.cnt%TM002;
    int time=16-(t/60);                  //制限時間の設定。ここでは16秒
    if(t%100==0){
        //40<x<FMX-40  50<y<150 の範囲で100離れた位置に80カウントで移動する
        move_boss_pos(40,50,FMX-40,150,100, 80);
    }
	for(i=0;i<2;i++){//1カウントに2回発射
		if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].col   = GetRand(6);//7種類の色をランダムに。
            boss_shot.bullet[k].x     = boss.x;//発射初期座標はボスの位置に指定
            boss_shot.bullet[k].y     = boss.y;
            boss_shot.bullet[k].knd   = 4;//弾の種類。円弾。
            boss_shot.bullet[k].angle = rang(PI2/20)+PI2/10*t;
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].cnt   = 0;
            boss_shot.bullet[k].spd   = 5;//スピードは速め。
            boss_shot.bullet[k].state = 0;//弾のステータス
            boss_shot.bullet[k].kaiten= 0;//弾を回転するかどうかのフラグ。回転すると醜くなったのでOFF。        
        }
        if(t%10==0)
            se_flag[0]=1;
	}

	if(time==0)
		ch.num=-1;//やることがないからとりあえず死亡

	DrawRotaGraph(500-14*i,0,1.0f,0.0f,img_num[0][time%10],TRUE);
	time/=10;                                      //制限時間の表示。本当はここじゃない

	if(t%60==0&&time<10)
		se_flag[60]=1; //10秒切ったら警告音

}
お尋ねしたいことは、
・10秒切るまえから警告音が鳴りだしてしまいます。
・16秒たってもゲームオーバーになりません。
これら2つの解決法と、
・制限時間が表示されません。どこに(ソースを)描けば見えるようになりますか?
というあほらしい疑問です。

何度も検証してきましたが、治る気配がないのでここで投稿させていただきました。
どなたか、よろしくお願いします。

Re: 【龍神録】スペルカードの制限時間実装

Posted: 2014年1月11日(土) 16:04
by みけCAT
amehirune さんが書きました:10秒切るまえから警告音が鳴りだしてしまいます。
この関数のローカル変数timeを10で割ってから10未満か判定しているため、
実質的には残り99秒以下で警告音を鳴らす仕様になっています。
amehirune さんが書きました:16秒たってもゲームオーバーになりません。
tはTM002未満にしかならないので、t/60は常に10以下です。
従って、この関数のローカル変数timeが0になることは(デバッガなどで書き換えなければ)無いはずです。
amehirune さんが書きました:制限時間が表示されません。どこに(ソースを)描けば見えるようになりますか?
ボスを描画する関数で、boss_shot.cntの値を用いて描画するのが1個の実装例だと思います。

Re: 【龍神録】スペルカードの制限時間実装

Posted: 2014年1月11日(土) 18:03
by Tatu
元のプロジェクトにボスの弾幕終了までのカウンタがあり、
カウンタが0になったらボスのHPを0にして弾幕を終了させるという処理があるはずです。
その変数を利用してみてはどうでしょうか。

Re: 【龍神録】スペルカードの制限時間実装

Posted: 2014年1月12日(日) 10:00
by amehirune
みけCATさんのアドバイスを受けて、今までtとしていた部分を、boss_shot.cntに変更し、場所もいろいろやったところきちんとなりました。
(残り時間の表示以外)
ありがとうございます。

ただ、Tatuさんの言うように、「カウンタが0になったらボスのHPを0にして弾幕を終了させるという処理」があるのならば、やっぱりそちらを使ったほうがいいのでしょうか?