ユーザーID パスワード

技術情報

  • FAQ よくある質問
  • 個人ユーザー向けサービスのお手続きについて
  • M2Mソリューション
  • (PR)FAQを利用してお問い合わせコスト削減

コード&コラム

第11回
ARゲームを作ってみよう(3)


前へ 1 |2 |3 |4 次へ

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のタップ処理とスコア表示

サンプルコード

第1回 リファレンスコード(文字列編)

第2回 リファレンスコード2(グラフィックス編)

第3回 リファレンスコード3(タッチイベント編)

第4回 リファレンスコード4(チェックボックス/ラジオグループ編)

第5回 リファレンスコード5(スピナー編)

第6回 リファレンスコード6(サウンド/ムービー編)

第7回 リファレンスコード7(トースト編)

第8回 リファレンスコード8(Google Maps API利用編)

第9回 リファレンスコード9(SQLite編)

第10回 リファレンスコード10(音声認識編)

第11回 リファレンスコード11(日付/時刻ダイアログ編)

第12回 リファレンスコード12(Bluetooth編)