人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

ファイアボール

マウスでクリックした方向にファイアボールを飛ばします。

fireball.jar

始点と終点から角度を求める

画面中央の点からマウスでクリックした方向にファイボールを飛ばしたいので画面中央の点から見たマウスの位置を求める必要があります。

下の図を見てください。始点(start)から終点(target)へ直線を引いたときの角度directionがファイアボールを飛ばす方向となります。

f:id:aidiary:20090828225126g:plain

始点の座標(画面中央の点)と終点の座標(マウス位置)からその間の角度を求めるにはatan2()を使います。数学では逆正接 (アークタンジェント) と呼ばれています。難しいことはともかく使い方は簡単です。

  // 始点と終点から角度を計算する
  double direction = Math.atan2(target.y - start.y, target.x - start.x);

これで角度directionが求まります。directionは-180度〜180度をラジアンで表示した値です。Xの正の方向から半時計周りは負の角度、時計回りは正の角度となります。ラジアンを度に変換するにはMath.toDegrees()が使えます。ソースコード中のdirection の値を表示してみると角度がいくつか直感的につかめるので確かめてみてください。

角度から速度を求める

角度が求まりました。次は角度から速度を求めて見ます。ファイアボールの速度はspeed=10と定義されています。これをX方向の速度vxとY方向の速度vyに分解してやる必要があります。ボールを動かす(2004/9/19)を参照。

この分解はsin()とcos()を使います。図にすると下のような感じです。

f:id:aidiary:20090828225127g:plain

やっとX方向の速度vxとY方向の速度vyが求まりました。後はボールを動かす(2004/9/19)と同じです。ループが回るたびに距離に速度を足して移動させます。

ファイアボールの作り方や発射の仕方はインベーダーの弾の発射とほとんど同じです。