2023年07月03日
Laboratoryテーマ??9「32方向弾」その?@
さて、今回はLaboratoryテーマ??9「32方向弾」です。
実は私のMSX仲間(プログラマーに非ず)から久しぶりに連絡があって、「先日の16方向弾の動画面白かった! 32方向弾やって!」と、要請されました。
思わぬYouTube効果に驚き。
というか、貴方プログラミングしないでしょう?
経緯を説明し、「3DダンジョンRPGが終わってからね。」と説明するも、「誰も見てないブログだろ?」と言われ、ショックのあまり了承してしまいました…。
まぁ確かに、反応があった方を優先したいですが…。
一応、「32方向弾は自機・敵含めSPRITE同時表示32枚以上だから、せめてLaboratoryテーマ??8「32枚を超えてSPRITEを表示させたい(非走査線割込)」の後で。」と抵抗はしましたが、「誰も見てないブログだろ?」とダメ出しされ、観念しました…。
余りにも唐突だったので、サンプルプログラム何も手を付けていないので、今回は考え方のみ。
そう、前回書いた「なんちゃって弾道計算」です。 (2023年6月7日記事参照「 しまった 」)
いくらマシン語とは言え、32回も同時に三角関数を使った弾道計算するとなると、さすがに重くなります。(やった事ないから真偽不明ですが…。)
Laboratoryテーマ??6「自機に向かって飛んでくる敵弾」は、自機と敵の位置が常に不定の為、計算して算出するしかないのですが、32方向弾は飛んでいく方向と速度は決まってるんです。
という事は、事前に移動量と方向をデータベース化しておけば、わざわざ時間のかかる計算をしなくてもいいのです!
因みに、32方向弾は一弾当たりの角度が、360°÷32方向=11.25°となります。
角度に対応した長さを事前に三角関数で計算しておきます。
データ容量は、32方向のX・Y移動量なので、32方向×2(X・Y)=64byteで済みます。
ここで、察しの良い方は気付かれたと思いますが、符号の変化と、X・Y移動量が逆転しているだけで90°ずつ同じ値なのです。
この符号は、Laboratoryテーマ??6「自機に向かって飛んでくる敵弾」の時の4つにエリア分けした符号と同じです。
それらを利用して実際に用意するデータは64byte÷4エリア=16byte分用意し、32弾÷4エリア=8弾毎に値とエリアをセットしてやれば良いのです。
と、言う訳で「なんちゃって弾道計算」は、データベースを読んで弾のX・Y移動量と、エリアをセットするロジックとなります。
弾道計算と言いながら、計算すらしないロジックです。
それでも、これだと非常に早いし、ロジックも簡単です。
次回サンプルを用意します。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/12058235
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック