「魔法少女戦記外伝」DL委託販売中!!

DMM 同人様 Melonbooks DL様 DLsite.com 様
DMM 同人様 Melonbooks DL 様 DLsite.com 様



最新記事ほか

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【ネタ】OpenGLを実行中にAlertDialogを表示させる【Android】

結構前にAndroidアプリを作成していたときに悩んだ点だったんですが、せっかくblogを設置したりもしたので備忘録代わりに「OpenGLを実行中にAlertDialogを表示させる」ネタを書いておきたいと思います。





中~大規模なゲームを作成する場合には、ゲームのデザインに合わせたオリジナルデザインのダイアログを1から作るようなケースもあるんですが、拙作アプリのような小規模なアプリになると標準ダイアログでも良いよね?なんて思ったりもしますし、ユーザーさんもあまり気にしないと思うんです(ですよね?)


というわけで、標準のダイアログである AlertDialog クラスのお力を借りようとするわけなんですが、OpenGL で描画するアプリで通常アプリと同じような使用をすると下のようなメッセージとともに強制終了しちゃいます。

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()


そこで色々調べていると、以下の記事にて具体的な方法が提示されていましたため参考にさせていただきました。

AndroidでOpenGLを実行中にAlertDialogを表示させる方法
http://shitappaprogramer.seesaa.net/article/179327873.html


記事によると具体的な方法は2点。

1. ベースとなるのContext、または Activity のスレッドで GUI を処理してもらう。
2. Looper.prepare() をコールして実行中のスレッド内でGUIを表示する。



ということなんですが、2.の「Looper」というクラスがよくわかっていませんw

2.の方法は Looper クラスというものを理解して使用しないと不具合への対処もできそうにないですし、私個人としては色々なプラットフォームをまたいでコードを書く場合が多いため、できるかぎり特殊なケースのコードや独自仕様は覚えたくないところです。

・・・で、記事に記載されています1.の方法を使用した結果が以下のようなコードです。

// OpenGL 中に強引にUI表示
// Alertを表示させるRunnableを作成して、あとはrunOnUiThreadにぶん投げるだけ。
((Activity)自身のコンテキスト).runOnUiThread(new Runnable()
{
@Override
public void run()
{
AlertDialog.Builder dlg = new AlertDialog.Builder(~自身のコンテキスト~);

dlg.setTitle("タイトル");
dlg.setMessage( "ダイアログですよ?" );
dlg.setPositiveButton( "はい", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{
// はいの処理
dialog.cancel();
}
});
dlg.setNegativeButton( "いいえ", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
// いいえの処理
dialog.cancel();
}
});
dlg.show();
}
});



冒頭にある以下のコードですが、だいたい OpneGL を使用しているコードは Activity クラスの外で制御コードを書いているだろうと思うので、どこかしらからコンテキストクラスを保持しておいてから呼ぶようにしておきましょう。

((Activity)自身のコンテキスト).runOnUiThread( new Runnable() { ~ }



たまにはこんな技術的な記事も書いていこうとは思うんですが、インデントのあるコードをどう書いていくかが結構迷いますねw今後の課題になりそうですww

あ、そうそう!ちなみにこのコードは「中二病ネームメーカー」で実際に使用しています。


う~ん・・・次回こそは二次創作同人ゲーの記事を書きたいところ・・・
というわけで、今回はこの辺で~ノシ
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Empress

Author:Empress
同人サークル「Atelier Empress」を立ち上げてしまった愚か者です。少しずつでも作品を公開していければと思う次第でございます。

検索フォーム
リンク
カテゴリ
タグ一覧

同人 Unity 進捗 雑記 コミケ C89 小ネタ プログラミング Unity小ネタ 年末 新年 Android 

委託販売
スポンサード リンク
FLOWER KNIGHT GIRL オンラインゲーム 千年戦争アイギス オンラインゲーム
Twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。