龍神録ベースで弾を衛星のように回転させる方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たっぱぁ

龍神録ベースで弾を衛星のように回転させる方法

#1

投稿記事 by たっぱぁ » 11年前

現在ボス弾幕を作成している途中で、魔理沙のオーレリーズシステムやグラディウスの回転オプションの様な、衛星の様に弾を回転させる方法を考えているのですが、どういう記述にすればいいかわからなくなってしまいました。
下記コードだと四方に弾が出て(テスト段階として)ゆっくりになるだけなんですが、その時にボスの周りをぐるぐる回るようにしたいです。
考え方とヒントとなるような式、もしくはコードを教えて下さい。よろしくお願いします。

コード:

void boss_shot_bulletH034(){
#define TM034 200
    int i,m,k,t=boss_shot.cnt%TM034;
	double angle[4]={PI,-PI/2,PI/2,PI2};
	double swave=sin(PI2/60*t);
	if(t==0){
		for(i=0;i<4;i++){
			if((k=search_boss_shot())!=-1){
			boss_shot.bullet[k].col   = 6;
			boss_shot.bullet[k].x     = boss.x;
			boss_shot.bullet[k].y     = boss.y;
			boss_shot.bullet[k].knd   = 3;
			boss_shot.bullet[k].angle = angle[i];
			boss_shot.bullet[k].flag  = 1;
			boss_shot.bullet[k].cnt   = 0;
			boss_shot.bullet[k].spd   = 5;
			boss_shot.bullet[k].state = 0;
			}
		}
	}
	for(i=0;i<BOSS_BULLET_MAX;i++){
		if(boss_shot.bullet[i].state==0 && boss_shot.bullet[i].cnt>=20){
			boss_shot.bullet[i].spd=1;
			boss_shot.bullet[i].x	+=swave/2;
			boss_shot.bullet[i].y	+=swave/2;
			boss_shot.bullet[i].state =1;
		}
	}
}

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

Re: 龍神録ベースで弾を衛星のように回転させる方法

#2

投稿記事 by Tatu » 11年前

こんな感じでどうでしょうか?

コード:

void boss_shot_bulletTest(){
	int i,k;
	int t=boss_shot.cnt;

	//衛星弾の軌道の半径(ボスと衛星弾の距離)
	double r;

	if(t==0){//TM034を使う場合、tをboss_shot.cntにしないと何回も出る
		for(i=0;i<4;i++){
			if((k=search_boss_shot())!=-1){
				boss_shot.bullet[k].col=4;
				boss_shot.bullet[k].x=boss.x;
				boss_shot.bullet[k].y=boss.y;
				boss_shot.bullet[k].knd=3;
				boss_shot.bullet[k].angle=PI/2*i;//上下左右に出すならこれで十分
				boss_shot.bullet[k].flag=1;
				boss_shot.bullet[k].cnt=0;
				boss_shot.bullet[k].spd=0;//衛星弾を関数内で制御することにしたため0
				boss_shot.bullet[k].state=1;
			}
		}
	}

	//衛星弾がボスの周りを回ることの確認のため、ボスを移動させる
	if(t%180==179){
		move_boss_pos(100,100,FMX-100,120,60,60);
	}

	for(i=0;i<BOSS_BULLET_MAX;i++){
		if(boss_shot.bullet[i].flag==1){
			switch(boss_shot.bullet[i].state){
			case 1:
				//ボスと衛星弾の距離を設定
				if(t<20){
					r=5*t;
				}
				else r=100;

				//弾の角度を利用して弾の位置を決める
				//ここでは弾の角度を変化させている
				boss_shot.bullet[i].angle+=PI2/60;

				//弾の位置の計算と代入
				//ボスの周りを回るのでboss.xやboss.yが必要
				boss_shot.bullet[i].x=boss.x+r*cos(boss_shot.bullet[i].angle);
				boss_shot.bullet[i].y=boss.y+r*sin(boss_shot.bullet[i].angle);

				//衛星弾から弾発射
				if(t>60 && t%17==0){
					if((k=search_boss_shot())!=-1){
						boss_shot.bullet[k].col=8;
						boss_shot.bullet[k].x=boss_shot.bullet[i].x;
						boss_shot.bullet[k].y=boss_shot.bullet[i].y;
						boss_shot.bullet[k].knd=8;
						boss_shot.bullet[k].angle=boss_shot.bullet[i].angle;
						boss_shot.bullet[k].flag=1;
						boss_shot.bullet[k].cnt=0;
						boss_shot.bullet[k].spd=3;
						boss_shot.bullet[k].state=0;
					}
				}
				break;
			}
		}
	}
}

実行結果(白いナイフが衛星弾)
無題.png

たっぱぁ

Re: 龍神録ベースで弾を衛星のように回転させる方法

#3

投稿記事 by たっぱぁ » 11年前

これです!こういうのを作りたかったんです!
ただ、衛星を定期的に召喚するようにしないとボムを撃った時に敵の攻撃がなくなってしまうので、そこだけ注意ですね!
Tatuさんありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る