横波ショット/ベクトル
横波ショット/ベクトル
敵ショットクラスの実装が済んでるので、いろんなショットを作ってみることに。
とりあえず前からやりたかった「横波ショット」を実装。
これです。うねうね動きます。 しかしこれがなかなか曲者で、波をどう表現するか悩みました…
そこで、最近学校で習った「ベクトル」を持ち出してみることに。
まず、このショットの動きは2つの向きのベクトルに分解できます。
進行方向のベクトルと、弾の横方向の速度ベクトルです。 すると、ベクトルの性質を用いて次のような計算ができます。 これで進行方向の x, y 座標から横方向のベクトルを求められます。
2つのベクトルが導きだされましたが、それぞれ横方向のベクトルの向きが逆になります。
あとは横方向のベクトルを波を表す関数を使って振動させてあげて、
進行方向のベクトルに加算すればいいでしょう。
これにて横波ショットの完成です。
で、何が言いたいかっていうと学校の授業で習うことはゲーム制作でたまに役立つよ、ってことです。
だから数学はたのしいなぁってわけです。
[/size]
RE: 横波ショット/ベクトル
高校を卒業して10年以上経ってから物理エンジンもどきを作ったときに数学や物理が役に立つことを実感しました。ナムアニクラウド さんが書きました:で、何が言いたいかっていうと学校の授業で習うことはゲーム制作でたまに役立つよ、ってことです。
だから数学はたのしいなぁってわけです。
わたしが高校生の頃は浮動小数点数を使うためには高価なオプションのコプロセッサを追加購入して装着しなければならない時代で、コプロの付いてないPCでは浮動小数点数をソフトウェアシミュレートしてました。
sqrt一個でゲームが処理落ちするくらいでしたし三角関数を使うのもご法度でした。
いまは3Dが当たり前でPCでは浮動小数点数(を使う関数)もかなり余裕を持って使えますし覚えた知識をそのまま活かせるので学校での勉強にも身が入るかもしれませんね。
わたしは数学・物理は赤点オンパレードでした。いまも理屈はほとんど分かってないです。
ベクトルの90度回転は、x,yを入れ替えてどちらかを符号反転するか三角関数テーブルから拾ってくる、といった処理を軽くするための手抜きの方法ばかり覚えてますけど。
#昔話が長くなってすみません。年寄りなもので。
Re: 横波ショット/ベクトル
>DecentLoveさん
コメントありがたし。
確かにベクトルは初めて見る人にはちょっと難しい概念かもしれませんね。
自分はベクトルの単元に入った時点でktkr!ってなりました。
自分はSTGを製作中なのでソースコードにベクトルの要素が満載なんです。
するとベクトルのことをよく知ることでいろいろできるっていう。
その他の数学も、時折役に立つことがあるかもしれません。
>ISLeさん
面白いお話ありがとうございます。
三角関数がご法度となると自分のプログラムは…ちょっと厳しいですねww
昔は数学をそのまま活かすのが難しかったんですね。意外です。
そして手抜きは良いことです(キリッ
コメントありがたし。
確かにベクトルは初めて見る人にはちょっと難しい概念かもしれませんね。
自分はベクトルの単元に入った時点でktkr!ってなりました。
自分はSTGを製作中なのでソースコードにベクトルの要素が満載なんです。
するとベクトルのことをよく知ることでいろいろできるっていう。
その他の数学も、時折役に立つことがあるかもしれません。
>ISLeさん
面白いお話ありがとうございます。
三角関数がご法度となると自分のプログラムは…ちょっと厳しいですねww
昔は数学をそのまま活かすのが難しかったんですね。意外です。
そして手抜きは良いことです(キリッ
Re: 横波ショット/ベクトル
浮動小数点数の代わりに整数型で表現した固定小数点数を使います。ナムアニクラウド さんが書きました:三角関数がご法度となると自分のプログラムは…ちょっと厳しいですねww
ラジアンではなく一周4096分割(0~4095)。
4096分割するとほとんど誤差は感じられなくなります。
あらかじめ計算しておいた三角関数の結果を配列に入れておいて(三角関数テーブル)取り出します。
sinとcosは90度ずらせば良いですし、符号は角度から導けるので4象限のひとつだけ持てば良い。
さらにテーブルには小数部だけで十分なので16ビットの小数部x1024の2KBのデータで事足ります。
そういう手抜き版三角関数でゲームを作ると動作速度も速いです。