ユーザーID パスワード

技術情報

  • FAQ よくある質問
  • 個人ユーザー向けサービスのお手続きについて

コード&コラム

第10回
ARゲームを作ってみよう(2)


前へ 1 |2 |3 |4 |5

Step4 現在位置の登録

ARテキストのデータベースに現在地を登録する処理を作成します。ARテキストはテキストとその位置情報によって構成されます。
位置情報についてはセンサーの値を使用し、登録するテキストの内容はアプリの使用者が任意に入力できるようにします。はじめに、文字列の入力と登録を行うボタンの配置を行います。

1.登録画面の作成
今回作成したARアプリはViewの重ね合わせによって実現しています。登録画面も同様にエディットテキストとボタンを配置したViewを重ねあわせることで実現します。

public class GPSARApp extends Activity implements SensorEventListener,
		LocationListener, View.OnClickListener {

	private static final int BUTTON_SIZE = 80;
	EditText editText;

	・・・(中略)・・・

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		・・・(中略)・・・

		// 画面サイズの取得
		Display disp = ((WindowManager) this
				.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
		int displayX = disp.getWidth();

		// 登録処理を行うlayoutの作成
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.HORIZONTAL);
		layout.setGravity(Gravity.BOTTOM | Gravity.RIGHT);
		// 登録文字
		editText = new EditText(this);
		editText.setWidth(displayX - BUTTON_SIZE);
		// 登録ボタン
		Button button = new Button(this);
		button.setText("Register");
		button.setOnClickListener(this);
		button.setWidth(BUTTON_SIZE);
		// 各要素の登録
		layout.addView(editText, 0);
		layout.addView(button, 1);

		// Viewの重ね合わせ
		setContentView(new CameraView(this));
		addContentView(arView, new LayoutParams(LayoutParams.FILL_PARENT,
				LayoutParams.FILL_PARENT));
		addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT,
				LayoutParams.FILL_PARENT));

	}

ボタンクリック時の動作を指定するメソッドonClickの内容は以下のようになります。
エディットテキストの内容が空であったり、位置情報が取得できない場合にはテキストをポップアップ表示することが出来るToastを使用してその旨を表示します。
登録可能な場合には、センサーの値を取得してデータベースに登録を行い、Cursorを取得してarView.readTableを呼び出すことでテーブルの再読み込みを行います。

	@Override
	public void onClick(View v) {
		if (editText.getText().toString().equals("")) {
			Toast.makeText(this, "テキストを入力してください", Toast.LENGTH_LONG).show();
		} else if (geoPoint == null) {
			Toast.makeText(this, "位置情報が取得できません", Toast.LENGTH_LONG).show();
		} else {
			ContentValues values = new ContentValues();
			values.put("info", editText.getText().toString());
			values.put("latitude", geoPoint.getLatitudeE6());
			values.put("longitude", geoPoint.getLongitudeE6());
			db.insert(DB_TABLE, "", values);
			cursor = db.query(DB_TABLE, new String[] { "info", "latitude",
					"longitude" }, null, null, null, null, null);
			arView.readTable(cursor);
			cursor.close();
			editText.setText("");
			Toast.makeText(this, "テキストが登録されました", Toast.LENGTH_LONG).show();
		}
	}

プログラムを実行すると以下のような画面が確認できます。テキストボックスをタップして文字列を入力し、Registerボタンを押すことで新たなARテキストの登録が確認出来ると思います。
もちろん、新たに登録したARテキストも画面に表示されます。


今回のコラムで制作したアプリは、端末が位置情報を正常に取得出来ていない場合、上手く動作しないことがあります。
GPS機能が正常に動作していることおよび、位置情報を正常に取得出来るかどうかをお確かめ頂くには、以下の手順を行って下さい。
  1. 「設定」アプリを起動
  2. 「位置情報とセキュリティ」を選択
  3. 「無線ネットワークを使用」のチェックボックスをはずす
  4. 「マップ」アプリを起動
  5. 「マップ」アプリで現在地を検出する
「マップ」アプリ内で現在地の検出が可能であれば、今回のコラムで制作したアプリも正常に動作します。
img

今回は位置情報を利用したARアプリの作成を行いました。作成前は、多くの機能を使う必要があり、大変だと思った方も多いかと思いますが、実際に作成してみると、基本的な動作の組み合わせで実現出来ることが分かると思います。
そして何よりARアプリのAndroid™ 端末との相性の良さを感じずにはいられません。今後ARの分野はますます活発になっていくのではないでしょうか。

ARアプリ開発の最終回となる次回では、OpenGLを使った3次元的なアプリを開発します。今回の内容はツール的な側面の大きいものでしたが、次回は実際に遊べるゲームアプリを作成します。
それではお疲れ様でした!



今回コラムで使用したプログラムはこちらとからダウンロード出来ます。


第10回 ARゲームを作ってみよう(2)
 Step1 カメラ画像へのオーバーレイと方位センサー情報の取得
 Step2 位置情報の取得とデータベースの作成
 Step3 可視判定とテキストの表示
 Step4 現在位置の登録

(文責:株式会社ベストクリエイト)

■免責事項

本コラム内で提供する情報のご利用は、利用者ご自身の責任において行われるものとします。本コラムで提供される各種情報については、慎重に作成、管理をしておりますが、当社は、これらの情報の正確性、有用性、完全性等を保証するものではありません。当社は、利用者がこれらの情報をご利用になったこと、またはご利用になれなかったことにより生じたいかなる損害についても責任を負いません。
本コラムで提供される各種情報に関し、利用者と他の利用者あるいは第三者と紛争が生じた場合、利用者は自己の費用と責任においてこれを解決するものとし、当社に損害を与えないものとします。
当社は、本コラムに掲載する情報の全部又は一部を予告なく変更する場合がございます。また、本コラムの運用を休止または停止する場合がございます。
当社は、理由の如何を問わず本コラムの提供が遅延し、または中断したことに起因して利用者または第三者が被った被害について、一切の責任を負いません。
当社は、利用者が、本コラムで提供している情報からリンクが張られている第三者のウェブサイト、または本サイトへリンクを張っている第三者のウェブサイトから取得された各種情報のご利用によって生じたいかなる損害についても責任を負いません。
通信環境、利用者のコンピューター環境その他の理由により、本コラムが正常にご利用できない場合がございます。
当社は、本コラムから入手された文書・写真・イラスト・動画・リンクその他各種情報(以下総称して「情報」といいます)に関して技術的サポート、機能改善等のいかなる技術的役務の提供もいたしかねますので、あらかじめご了承ください。
本掲載内容・各種名称は公開日時点のものであり、団体・サービス・ツール等の名称が変更されることがあります。

サンプルコード

第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編)