Step2 敵の動作と終了判定
出現したオブジェクト(敵)が、プレイヤーに向かって近づいてくるような動作を設定します。一定距離以上近づいた時にゲームオーバーとなる処理を追加します。
1.オブジェクトの移動処理
まずオブジェクトの移動処理を作成します。
Enemy.javaにオブジェクト自身を移動させるメソッドを追加します。
public void move(GL10 gl) { // プレーヤーの方向に移動する posY += velocity * Math.sin(-theta); posX += velocity * Math.cos(-theta) * Math.cos(phi + Math.PI); posZ += velocity * Math.cos(-theta) * Math.sin(phi + Math.PI); } |
プレーヤーの位置(カメラの位置)が原点となっているのでその方向に向けて移動するようにします。移動速度は変数velocityによって決められるようにします。
Moveメソッドの呼び出しをGLRendererのonDrawFrameで行うようにします。
・・・(中略)・・・ // オブジェクトを移動します enemy.move(gl); // オブジェクトを描画します enemy.draw(gl); ・・・(中略)・・・ |
プログラムを実行すると、以下のように敵が近づいてくるのが確認できると思います。
2.終了判定
オブジェクトの座標から、ゲームの終了判定を行います。こちらも同様に、Enemy.javaのメソッドとして判定を行う処理を作成します。
public boolean isHit() { // プレーヤーに触れたか判定する double distance = Math.sqrt(posY * posY + posX * posX + posZ * posZ); if (distance < 2.0) return true; return false; } |
呼び出し元は同じくGLRendererのonDrawFrameとなります。
・・・(中略)・・・ // オブジェクトを描画します enemy.draw(gl); if (enemy.isHit()) { state = STATE_GAMEOVER; vibrator.vibrate(3000); } ・・・(中略)・・・ |
GLRendererクラスの中で状態を保持するstate変数を用意して、それによって処理を変化させていきます。
第11回 ARゲームを作ってみよう(3)
Step1 Android OpenGLの導入とセンサーによる紐付け
Step2 敵の動作と終了判定
Step3 OpenGLのタップ処理とスコア表示