N-WAY弾を一括処理してくれるセクション
Posted: 2012年3月31日(土) 23:42
こんにちは。N-WAY弾を一括処理してくれるプログラムを組もうとしているのですが、うまくいきません。
具体的には、
1.敵に「敵が放つ弾のWAY数」と「その弾と弾の間の角度」を持たせる。
2.それを元に3way,4way,11wayとどんなway数でも、どんな弾と弾の間の角度でも一括処理してくれるN-WAY処理セクションを作る。(さすにが0WAYなどのナンセンスな値は無視して。)
というものを作ろうと試みていました(2WAY,3WAY,4WAYと個別に作っていくことは大変なので)。
しかし色々やってみれどWAY数は楽に実装できても、
7WAYなのに右から2番目の弾が自機狙いになる、3wayなのに一番右側の弾が自機狙いになる、
などという事態で、三角関数の知識が乏しいため、この辺りが限界でした。
自分以外が読んで把握できるのかはわかりませんが、以下に注釈大めで挑戦の軌跡を書きますので、どなたかアドバイスよろしくお願いします。
(だいたいは、ここの龍神録プログラミングと同じような作りなので、大丈夫だといいのですが……)
略
tempには弾を吐き出す親のインスタンス番号が入っています。
if(enemy[temp].bullet_pattern==201){//敵[temp]の攻撃パターン201のとき = N-Way弾の一括処理
int i,kazu;
int way=enemy[temp].enemy_way;//敵が放つ弾のway数をint wayに代入。
double haba=enemy[temp].enemy_way_haba;//敵が放つ弾と弾の間の角度。なのでhaba
for(kazu=0;kazu<way;kazu++){//WAY数の数だけ繰り返す
for(i=0;i<ENEMY_BULLET_MAX;i++){
if(tama.tama_flag==0 && enemy[temp].enemy_hp>0){//弾のフラグがOFFで敵が生きていれば
tama.tama_flag=1;//弾のフラグON
tama.tama_x=enemy[temp].enemy_x;//親のX座標を代入
tama.tama_y=enemy[temp].enemy_y;//親のY座標を代入
double shotatan2=atan2(chara_y+20-tama.tama_y,chara_x+14-tama.tama_x);//弾と自機の角度 - このサイトお馴染みのshotatan2です
tama.tama_angle=PI2/20/2+PI2/20*kazu*shotatan2;//弾の飛ぶ角度がおかしいのは、多分ここのせい。しかしどう書けばよいのかがわかりません。
//注釈:;敵が放つ弾と弾の間の角度であるdouble habaは、どこで使えばよいのかがわからないので、使われていません。
tama.tama_speed=2;//弾の速度
}
}
}//N-Way弾の一括処理終わり
また、18章-自機ショットに当たり判定をつけてみよう。URL: http://dixq.net/rp/18.html
での当たり判定をDrawBoxやDrawCircleなどで視覚的に見えるようにする方法はないでしょうか。
32*32の敵画像で、何故int enemy_range[ENEMY_RANGE_MAX]={16,30,16,50};
という数字が入ったりするかがまだ僕には難しいので、理解しやすくするためにも視覚的に見ることはできないかなと思いました。
(のちのち、色々な大きさの画像の当たり判定を確認する際にも便利そうですし)
長くなりましたが、どうかよろしくお願いします。
具体的には、
1.敵に「敵が放つ弾のWAY数」と「その弾と弾の間の角度」を持たせる。
2.それを元に3way,4way,11wayとどんなway数でも、どんな弾と弾の間の角度でも一括処理してくれるN-WAY処理セクションを作る。(さすにが0WAYなどのナンセンスな値は無視して。)
というものを作ろうと試みていました(2WAY,3WAY,4WAYと個別に作っていくことは大変なので)。
しかし色々やってみれどWAY数は楽に実装できても、
7WAYなのに右から2番目の弾が自機狙いになる、3wayなのに一番右側の弾が自機狙いになる、
などという事態で、三角関数の知識が乏しいため、この辺りが限界でした。
自分以外が読んで把握できるのかはわかりませんが、以下に注釈大めで挑戦の軌跡を書きますので、どなたかアドバイスよろしくお願いします。
(だいたいは、ここの龍神録プログラミングと同じような作りなので、大丈夫だといいのですが……)
略
tempには弾を吐き出す親のインスタンス番号が入っています。
if(enemy[temp].bullet_pattern==201){//敵[temp]の攻撃パターン201のとき = N-Way弾の一括処理
int i,kazu;
int way=enemy[temp].enemy_way;//敵が放つ弾のway数をint wayに代入。
double haba=enemy[temp].enemy_way_haba;//敵が放つ弾と弾の間の角度。なのでhaba
for(kazu=0;kazu<way;kazu++){//WAY数の数だけ繰り返す
for(i=0;i<ENEMY_BULLET_MAX;i++){
if(tama.tama_flag==0 && enemy[temp].enemy_hp>0){//弾のフラグがOFFで敵が生きていれば
tama.tama_flag=1;//弾のフラグON
tama.tama_x=enemy[temp].enemy_x;//親のX座標を代入
tama.tama_y=enemy[temp].enemy_y;//親のY座標を代入
double shotatan2=atan2(chara_y+20-tama.tama_y,chara_x+14-tama.tama_x);//弾と自機の角度 - このサイトお馴染みのshotatan2です
tama.tama_angle=PI2/20/2+PI2/20*kazu*shotatan2;//弾の飛ぶ角度がおかしいのは、多分ここのせい。しかしどう書けばよいのかがわかりません。
//注釈:;敵が放つ弾と弾の間の角度であるdouble habaは、どこで使えばよいのかがわからないので、使われていません。
tama.tama_speed=2;//弾の速度
}
}
}//N-Way弾の一括処理終わり
また、18章-自機ショットに当たり判定をつけてみよう。URL: http://dixq.net/rp/18.html
での当たり判定をDrawBoxやDrawCircleなどで視覚的に見えるようにする方法はないでしょうか。
32*32の敵画像で、何故int enemy_range[ENEMY_RANGE_MAX]={16,30,16,50};
という数字が入ったりするかがまだ僕には難しいので、理解しやすくするためにも視覚的に見ることはできないかなと思いました。
(のちのち、色々な大きさの画像の当たり判定を確認する際にも便利そうですし)
長くなりましたが、どうかよろしくお願いします。