水晶とドラゴンービヨヨーンな敵プログラミング

さて、生徒用のサンプルゲーム水晶とドラゴン、ちょっといじっている時間がなかったので今週余りいじれていませんでしたが、本日、ちょっと更新しました。

シューティングゲームでありがち飛び跳ねる敵

今日はビヨンビヨンとジャンプして迫ってくる敵を作りました。

動画を見ていただくと黄色い敵(単なる黄色い四角形でごめんなさい)が、飛び跳ねながら迫ってくるのが確認できると思います。

実際にはジャンプしているわけでなく、三角関数を使って上下に移動しながら迫ってくる敵という感じです。

サイン関数を使う

こういう、上下とか左右のジグザグなゲームの敵キャラの動きではありがちなサイン関数を使っています。

三角関数は中学3年の数学だったかな?

sin(値)という感じで大抵のプログラミング言語で使用可能な関数の一つです。もちろんコサイン関数やタンジェント関数、アークタンジェント関数もあります。

初めての方が悩みそうなポイントが2つあって、1つはsin(値)の値です。

中学までだと確か角度は分度器などでおなじみの度数法なんですが、プログラミングをするときは使えるのですが、弧度法で計算を進めることが多いです。

高校ではラジアンも使うのですんなりなんですが、中学生までだとビビっちゃいますよね。

ラジアンは分からなくてもとりあえず使える!

でも、あんまり気にしなくていいです。HSPは

deg2rad(値) 読み:デグリートゥーラジアン

という関数の値のところに角度を入れると、ラジアンに直してくれる関数があります。

sin(deg2rad(値))としてあげれば、角度に対応するsinの値が取得できます。

degはdegree(デグリー)で日本語では度数法、radはradian(ラジアン)で日本ではラジアン。

間の2ですが、関数の名前を付けるときによく使われるダジャレみたいなもので”to”の意味です。2は英語でtwoですからね。

それでデグリーからラジアンに変換するので、デグリートゥーラジアンというわけです。

C言語のatoi

ちょっと話それます。C言語などでatoiという関数があるのですが、これはエートゥーアイでアスキートゥーインテジャー、アスキー(ascii)は文字で、インテジャーは整数を指しています。文字コードの数値を整数型に変換するときにお世話になります。C言語で人工知能の遺伝的アルゴリズムを扱う時にはよく使われると思います。私は使ってました(笑)atoiをアとイって読んでいる人がいて笑ってしまってごめんなさい(;^_^A
というしょうもない話でした。

sin(deg2rad(値))の値はどうする?

話がそれましたが、円は一周するので角度は0°~360°と思いがちですがスノーボード、スケボーなどでは角度の名前が付いた技があり、180(ワンエイティ)、540(ファイブフォーティ)、1080(テンエイティ)などがあります。

これらみんな角度です。360度以上回れば540度だったり、1080度だったりで構わないんです。

なにか進行する変数、増え続ける変数を値のところに入れてあげましょう。手っ取り早いのは敵が移動するx座標の値だと思います。最初は何も気にせず、猪突猛進な敵キャラを作って確認すると良いと思います。いわゆるプロトタイプですね。

sinの数値は下のグラフでは横軸の値が増えれば縦軸はプラスマイナスを上下に移動するので、これを使えば敵キャラの上下移動やジグザグした動きは楽勝です!

サインカーブ

でも、このままだと、出てくる値はー1~1の間しかとらないのでゲームの座標には使えませんよね。

なので、sin(値)×10とかして整数の値とれるようにしてあげるといい感じになりますよ。

値も1ずつではなく、5ずつ増やしたり工夫していくと動きにバリエーションを持たせることができいます。

文字ばっかりの説明でわかりにくかったと思いますが、まずは深く考えずsin関数を使って数値を覗いてみてはいかがでしょうか?

タイトルとURLをコピーしました