ページ 1 / 1
敵の撃つ弾について
Posted: 2009年1月28日(水) 10:57
by arc
こんにちは初心者ですが、毎日チェックして参考にさせてもらっているarcというものです。
C言語で龍神録を元にシューティングを作っているのですが、雑魚敵に分裂弾を撃たせたいのですが、どうプログラミングしていいのかわかりません。よろしければ教えていただけませんか?
Re:敵の撃つ弾について
Posted: 2009年1月28日(水) 11:37
by Dixq (管理人)
こんにちは^^
参考にしてくださってありがとうございます☆
では
http://dixq.net/rp/14.html
こちらを例に紹介します。
こちらの中央下部分に
//ばらまきショット(減速)
void shot_bullet_H006(int n){
int t=shot[n].cnt;
int k;
if(t>=0 && t<120 && t%2==0){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle =shotatan2(n)+rang(PI/4);
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =enemy[shot[n].num].col;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =4+rang(2);
se_flag[0]=1;
}
}
for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分ループ
if(shot[n].bullet.spd>1.5)//速度が1.5より大きいものがあれば
shot[n].bullet.spd-=0.04;//減速
}
}
こんなのありますよね。この青字の部分は現在発射中の弾を見つけて制御しているのです。
ですので、ここで適切な弾を見つけて発射させてやればいいです。
サンプル書いてみました。まず弾の識別番号stateを0として大玉を発射します。
大玉を常に計算しつつ、発射後1秒たった瞬間に、
その位置からさらに100個弾を発射しています。
下の意味がよくわからなければまた聞いて下さい。
14章のshotH.cppにある
void shot_bullet_H000(int n)
関数を以下の関数に書き換えて実行してみて下さい。
void shot_bullet_H000(int n){
int t=shot[n].cnt;
int k;
if(t==0){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =0;
shot[n].bullet[k].angle =PI/2;
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =0;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =2;
shot[n].bullet[k].state =0;//分裂させる弾ですよ
se_flag[0]=1;
}
}
for(int i=0;i<SHOT_BULLET_MAX;i++){
if(shot[n].bullet.flag==1){//現在登録されている弾なら
if(shot[n].bullet.state==0){//分裂させる弾なら
if(shot[n].bullet.cnt==60){//発射して1秒後なら
for(int s=0;s<100;s++){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =6;
shot[n].bullet[k].angle =rang(PI);
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =shot[n].bullet.x;
shot[n].bullet[k].y =shot[n].bullet.y;
shot[n].bullet[k].col =0;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =1.5+rang(0.5);
shot[n].bullet[k].state =1;//分裂させない弾ですよ
se_flag[0]=1;
}
}
shot[n].bullet.flag=0;//元の弾消す
}
}
}
}
}
Re:敵の撃つ弾について
Posted: 2009年1月28日(水) 11:46
by arc
解決しました!
わかりやすい説明の上、ソースまで書いていただいてありがとうございます^^
そして質問を見返すとかなり抽象的な文章でしたのでお詫びします。
管理人様どうもありがとうございます。