2023年07月20日
ゲームと三角関数
今回「Laboratory」で説明した、「自機に向かって飛んでくる敵弾」もそうなんですが、シューティングゲームや、アクションゲームなどのゲーム制作には三角関数がかなりの割合で付きまといます。
敵の動きが真っ直ぐ自機に向かってきたり、曲線(円や波状)を描くように動けば、それは(多分)三角関数です。(パターンデータの可能性もあるが...)
ただ初心者は、「三角関数って直角三角形の辺の長さや角度を求める数式だよね?」
「そもそも、三角関数をどう使えばああいう動きが出来るの?」
と、悩むと思います。(私もそうでした。)
特に数学不得手な人には、三角関数は非常に難しい問題かと思います。
まぁ、そういった動きをしないジャンルのゲーム(ロールプレイングゲームとかアドベンチャーゲーム、パズルゲームとか。)を作っていればいいんでしょうが…。
でも、やっぱりシューティングゲームやアクションゲームも作りたいですよね?
となると、現状必須の知識と思われます。
今回、Laboratryで取り上げるに当たり、いろんな言語のいろんな解説サイトを回りましたが、新しい言語用の解説しかなく、言語中で当たり前のようにsinだのcosだの使ってて、何の参考にもなりませんでした…。
逆に「これだけプログラム中で三角関数の計算していて、この速度で動作するんだ…。」って、感心してしまいました。
しかも、そのプログラムで弾幕シューティングまで作れてしまうなんて…。
CPUの処理能力高すぎ…。
うーん、敵毎、弾毎にそれだけ三角関数使って計算していたら、昔のパソコンなら絶対にゲームにならない速度ですね…。
そもそもMSXには三角関数を求める命令がないから、sin・cos・tanをどう求めるか?
他の人のプログラムを見たことはないけど、多分、私同様計算結果をデータベースとして用意してるんじゃないかなと思います。
それでも単純に三角関数の回答だけデータベース化しても、その値から長さとか求めるためにかけ算・割り算の計算しまくりで、一層遅くなりますね…。
じゃぁ、どうするか?
それらを追加でLaboratoryのテーマに挙げますね。