STGの弾幕で綺麗な正円(半円)の書き方を教えてください
Posted: 2014年3月11日(火) 04:08
初めて質問させていただきます。
龍神録の方を参考にさせてもらっているのですが、弾幕の作り方でつまずいています。
「自機の上下から周りに少しずつ時計回りに弾で半円を描いていき閉じ込める」というような物を作りたいのですが、綺麗な半円の書き方が解りません。(「時計回りに弾で」の部分を書き直しました)
とりあえず、何とか弾で閉じ込める方法は以下の様に出来ました。しかし、これでは四角になります。
色々と無駄な記入もあると思いますが、まあ、それは置いときますとして。
私がやりたいのは四角ではなく円(半円)です。
もしかしたら、sin波を使えばいいのかもしれませんが、どのように数値を変えても楕円になってしまい、どうにも上手くいきません。
数学な苦手な自分にはこれ以上の良案が思い浮かびません。そもそもsin波を使うのは間違いだったりしますか?
どうか綺麗な半円の書き方を教えてください。お願いしますm(_ _)m
龍神録の方を参考にさせてもらっているのですが、弾幕の作り方でつまずいています。
「自機の上下から周りに少しずつ時計回りに弾で半円を描いていき閉じ込める」というような物を作りたいのですが、綺麗な半円の書き方が解りません。(「時計回りに弾で」の部分を書き直しました)
とりあえず、何とか弾で閉じ込める方法は以下の様に出来ました。しかし、これでは四角になります。
void boss_shot_bulletH100(){
int k,cnt=boss_shot.cnt%700;
//初期位置
if(cnt==0){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = ch.x;
boss_shot.bullet[k].y = ch.y-60;
//カウントゼロ時の座標を覚えておく。[0]とあるのは[1][2]~と計五回くらい円を描く予定で0~5をループするからです。
boss_shot.bullet[0].temp_x = ch.x;
boss_shot.bullet[0].temp_y = ch.y;
//上で描いた計五回の円のそれぞれのカウント数です。
boss_shot.bullet[0].temp_cnt=0;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].spd = 0;
se_flag[0]=1;
}
}
//自機の上から自機の右に斜めに線を引いて行く
if(cnt>0 && cnt<60){
boss_shot.bullet[0].temp_cnt++;
int st=boss_shot.bullet[0].temp_cnt;
if(boss_shot.bullet[0].temp_cnt%10==0){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss_shot.bullet[0].temp_x+st;
boss_shot.bullet[k].y = boss_shot.bullet[0].temp_y-60+st;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 0;//スピード
se_flag[0]=1;
}
}
}
//自機の右から自機の下に斜めに線を引く
if(cnt>=60 && cnt<120){
boss_shot.bullet[0].temp_cnt++;
int st=boss_shot.bullet[0].temp_cnt;
if(boss_shot.bullet[0].temp_cnt%10==0){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss_shot.bullet[0].temp_x+60-st;//座標
boss_shot.bullet[k].y = boss_shot.bullet[0].temp_y+st;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 0;//スピード
se_flag[0]=1;
}
}
//後は同じように左側の線も
//boss_shot.bullet[k].x = boss_shot.bullet[0].temp_x+st;
//boss_shot.bullet[k].y = boss_shot.bullet[0].temp_y+60-st;
//と
//boss_shot.bullet[k].x = boss_shot.bullet[0].temp_x-60+st;
// boss_shot.bullet[k].y = boss_shot.bullet[0].temp_y-st;
//等の足し方や引き方を変えて線を引きます
//描き始めは右側の線と同じカウントタイミング
}
私がやりたいのは四角ではなく円(半円)です。
もしかしたら、sin波を使えばいいのかもしれませんが、どのように数値を変えても楕円になってしまい、どうにも上手くいきません。
//こういう風に描きました
boss_shot.bullet[k].x = boss_shot.bullet[0].temp_x+sin( PI*2 / 120 * st ) * 60;
boss_shot.bullet[k].y = boss_shot.bullet[0].temp_y+60-st*2;
どうか綺麗な半円の書き方を教えてください。お願いしますm(_ _)m