グレイズについて

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

グレイズについて

投稿記事 by Tatu » 14年前

今回はグレイズについて書きます。



弾にグレイズしたかどうかの情報を持たせます。

struct.hのbullet_tに以下を追加

CODE:

	//グレイズしたかどうか 0ならしていない1ならしている
	int graze_flag;
グレイズ判定関数を作成します。当たり判定用に用意されている関数を使うと楽です。

out.cppに以下を追加

CODE:

//敵ショットのグレイズ判定
int graze_judge_enemyshot(int s,int n){
    if(shot[s].bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
        return out_judge(
            shot[s].bullet[n].x,shot[s].bullet[n].y,ch.x,ch.y,
            bullet_info[shot[s].bullet[n].knd].range+10,CRANGE*ch.crange_rate,
            shot[s].bullet[n].spd,shot[s].bullet[n].angle
            );
	}
	return 0;
}

//ボスショットのグレイズ判定
int graze_judge_bossshot(int n){
    if(boss_shot.bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
        return out_judge(
            boss_shot.bullet[n].x,boss_shot.bullet[n].y,ch.x,ch.y,
            bullet_info[boss_shot.bullet[n].knd].range*boss_shot.bullet[n].size+10,CRANGE*ch.crange_rate,
            boss_shot.bullet[n].spd,boss_shot.bullet[n].angle
            );
    }
	return 0;
}
グレイズしたら得点を100増やし、グレイズフラグを1にします。グレイズ数も増やします。
グレイズをしたとき、エフェクト画像を飛ばします。
効果音はアイテム獲得時のものを使います。

GV.hに以下を追加

CODE:

GLOBAL int img_eff_graze;//グレイズのエフェクト画像
load.cppのload()に以下を追加

CODE:

	img_eff_graze = LoadGraph( "../dat/img/effect/kiran.png");

	sound_se[5]=LoadSoundMem("../dat/se/item_get.wav");//グレイズ時の効果音
エフェクト登録関数

CODE:

//グレイズ時のエフェクト
void enter_graze_effect(){
	int k=search_effect();
	if(k!=-1){
		effect[k].ang=0;
		effect[k].brt=255;
		effect[k].cnt=0;
		effect[k].col=0;
		effect[k].eff=0;
		effect[k].flag=1;
		effect[k].img=img_eff_graze;
		effect[k].knd=11;
		effect[k].mvang=rang(PI2);
		effect[k].r=0.3;
		effect[k].spd=1.5;
		effect[k].x=ch.x;
		effect[k].y=ch.y;
		se_flag[5]=1;
	}
}

グレイズ時の処理を追加します。

enemy_shot_and_ch()に以下を追加

CODE:

					if(shot[s].bullet[n].graze_flag==0){//グレイズ判定
						if(graze_judge_enemyshot(s,n)==1){
							enter_graze_effect();
							ch.score+=100;
							ch.graze++;
							shot[s].bullet[n].graze_flag=1;
						}
					}

CODE:

					if(boss_shot.bullet[n].graze_flag==0){//グレイズ判定
						if(graze_judge_bossshot(n)==1){
							enter_graze_effect();
							ch.score+=100;
							ch.graze++;
							boss_shot.bullet[n].graze_flag=1;
						}
					}
エフェクトの計算について書きます。

effect.cppのeffect_calc()に以下を追加

CODE:

				case 11://グレイズエフェクト
					effect[i].spd-=1.5/60;
					effect[i].ang+=PI2/20;
					if(effect[i].cnt==60){
						effect[i].flag=0;
					}
					effect[i].cnt++;
					break;
graph.cppのgraph_stg()に以下を追加

CODE:

	graph_effect(11);//グレイズエフェクト

あとは発射するときにgraze_flagが0になるようにすればうまくいくはずです。

コメントはまだありません。