弾の移動プログラム

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

弾の移動プログラム

#1

投稿記事 by ume » 14年前

enemyShot[j].bullet[k].x += enemyShot[j].bullet[k].speed * Math.cos(enemyShot[j].bullet[k].angle);
enemyShot[j].bullet[k].y += enemyShot[j].bullet[k].speed * Math.sin(enemyShot[j].bullet[k].angle);

現在弾の移動プログラムをこのようにしているのですが、この方法だと楕円が描けないと思い
他にいい方法がないかで悩んでいます。

vx,vyで速度管理をすることも考えたのですが、vx,vyだとホーミング弾の時にうまく進まなですし。
speedでの速度管理だとホーミングは正常なのですが、speedだと弾幕作りでvx,vyより作れるものが限られてしまう気がしています。

ホーミングとの切り替えや、作れる弾幕の種類など、なるべくスマートなプログラムで拡張性が高いものを作りたいので、
どなたかいい案があればお願いします。

また、皆さんはどのような弾の移動プログラムにしてるのかもよかったら教えてください。

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

Re: 弾の移動プログラム

#2

投稿記事 by 白い時空 » 14年前

(1)vx,vyの移動とspeed,angleの移動を両方使う

コード:

enemyShot[j].bullet[k].x += enemyShot[j].bullet[k].speed * Math.cos(enemyShot[j].bullet[k].angle);
enemyShot[j].bullet[k].y += enemyShot[j].bullet[k].speed * Math.sin(enemyShot[j].bullet[k].angle);

enemyShot[j].bullet[k].x += enemyShot[j].bullet[k].vx;
enemyShot[j].bullet[k].y += enemyShot[j].bullet[k].vy;
(2)speed,angleの移動を複数作る

コード:

enemyShot[j].bullet[k].x += enemyShot[j].bullet[k].speed * Math.cos(enemyShot[j].bullet[k].angle);
enemyShot[j].bullet[k].y += enemyShot[j].bullet[k].speed * Math.sin(enemyShot[j].bullet[k].angle);

enemyShot[j].bullet[k].x += enemyShot[j].bullet[k].speed2 * Math.cos(enemyShot[j].bullet[k].angle2);
enemyShot[j].bullet[k].y += enemyShot[j].bullet[k].speed2 * Math.sin(enemyShot[j].bullet[k].angle2);
思いつくのはこの2つですかね

(2)の場合、angle=0,angle2=π/2(90°)にすれば、speed,speed2をvx,vyとして使えるので
どっちでもいいと思います。

私は楽なので(1)を使ってます。

学生A

Re: 弾の移動プログラム

#3

投稿記事 by 学生A » 14年前

コード:

int scaleX=2, scaleY=1; //横2倍、縦1倍の楕円
enemyShot[j].bullet[k].x += scaleX * enemyShot[j].bullet[k].speed * Math.cos(enemyShot[j].bullet[k].angle);
enemyShot[j].bullet[k].y += scaleY *enemyShot[j].bullet[k].speed * Math.sin(enemyShot[j].bullet[k].angle);
簡易的な方法ですが、scaleX、scaleYを用意して、上の様に掛けると、楕円になると思います。

ume

Re: 弾の移動プログラム

#4

投稿記事 by ume » 14年前

>>白い時空さん
 
やはりvx、vyとspeedの二つで管理するのが一番わかり易いですよね。
speed二つでの管理も考えたのですが、speed管理だと弾の位置計算を毎回しないといけないのが気になりますよね・・・。
vx.vyですと、初期化時のまま足していくだけでいいので、弾幕が多くなると処理スピードは上かなーなんて思いました。

vx.vyが安定ですかね、勉強になりました、ありがとうございます!!

>>学生Aさん

変数を用意すれば楕円を描けるのは盲点でした!!!
ですが、vx.vyに比べてしまうと、楕円軌道を描くときの速度がspeedだと等速にしかならないっぽいですね・・・。
構造体の数的にもvx.vy.speedとspeed.scaleX.scaleYで同じ数ですし、汎用性をみるとvx.vyのほうやっぱりいいですかね。

勉強になりました、ありがとうございます!!

閉鎖

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