[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
自機狙い弾を追加してみました。
とりあえず10フレームに1回発射するようにしています。
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1239168186
自機狙い弾についてはコチラで詳しく書いていますが、サイン、コサイン、アークタンジェントを
使って計算しています。
プログラムとしてはこんな感じ↓
////////////////////////////敵弾発生処理////////////////////////////////////////////////////////////
//引数 x軸敵位置、y軸敵位置
//返値 なし
void teki01tama(int x,int y){
int i;
double r=0.;//敵弾角度
double ds=5.;//弾の速さ
for(i=0;i<ENEMY_TAMA_MAX;i++){//敵弾初期化
if(enemy_tama[i].etf==0) {
enemy_tama[i].etf=1;//弾の存在を有に
enemy_tama[i].etx=x+24;//初期位置
enemy_tama[i].ety=y+24;
r=atan2((ch.y+24)-(y+24), (ch.x+24)-(x+24));//敵と自機との角度を求める
enemy_tama[i].etr=r;
enemy_tama[i].etmx=cos(r)*ds;//移動量
enemy_tama[i].etmy=sin(r)*ds;
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
このteki01tama関数でまず自機と敵の角度を調べて、弾の移動方向を決めます。
2点の角度を調べるにはアークタンジェントを使うのですが、HSPの場合はatanのみで良かった
のですがC言語の場合はatan2関数「double atan2(double y, double x)」となるようです。
なので、このatan2関数を使ってr=atan2((ch.y+24)-(y+24), (ch.x+24)-(x+24))みたいな
感じで角度を調べます。
ついでに敵弾画像回転用にenemy_tama[i].etr=r;として角度を代入しておきました。
で、サインとコサインで移動量を計算します。
enemy_tama[i].etmx=cos(r)*ds;
enemy_tama[i].etmy=sin(r)*ds;
こんな感じ。
ちなみにatan2関数を使う為には#include <math.h>の記述が必要です。
次は弾の移動です。
敵弾の移動関数はこんな感じ↓
/////////////////////////////敵弾移動処理///////////////////////////////////////////////////////////
//引数 なし
//返値 なし
void tekitamamove(){
int i;
g_tekitamacount=0;
for(i=0;i<ENEMY_TAMA_MAX;i++){//敵弾初期化
if(enemy_tama[i].etf==1) {//敵弾が画面にある時
g_tekitamacount++;
enemy_tama[i].etx=enemy_tama[i].etx+enemy_tama[i].etmx;//敵弾移動
enemy_tama[i].ety=enemy_tama[i].ety+enemy_tama[i].etmy;
DrawRotaGraph( enemy_tama[i].etx , enemy_tama[i].ety , 1.0f , enemy_tama[i].etr , g_tekitama01 , TRUE ) ;//敵弾表示
if(enemy_tama[i].etx>500) enemy_tama[i].etf=0;//画面からはみ出したら削除
if(enemy_tama[i].etx<140 ) enemy_tama[i].etf=0;
if(enemy_tama[i].ety>480) enemy_tama[i].etf=0;
if(enemy_tama[i].ety<-48 ) enemy_tama[i].etf=0;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
弾の現在の座標enemy_tama[i].etx , enemy_tama[i].ety に
移動量enemy_tama[i].etmx , enemy_tama[i].etmyを足してDrawRotaGraph関数を使って
自機の方向に回転させて表示させています。
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!