バックキー押下 ― 2013/12/06
今までのサンプルでは、Androidのバックキーを押すと有無を言わせずアプリが終了します。
ゲームなんかだと前の画面に戻ったりメニューを出したりしたいので、native側でバックキーの処理を行えるようにします。
java側の処理です。
BaseActivity.java
onBackPressed()でバックキーの押下を検知して、updateNative()で native側に状態を送る…だけです。
native側です。
SysMain.cpp
java側から受け取ったバックキーの状態を sys::key_statusにセットする…だけです。やっぱり。
common.h
バックキー押下時の sys::key_statusの値はこちらで定義しています。
サンプルです。
AppMain.cpp
バックキーが押されると、
・サウンド se.oggを再生
・60フレームかけてフェードアウトの後、アプリ終了
という処理になっています。
プロジェクト一式はこちらから。
ゲームなんかだと前の画面に戻ったりメニューを出したりしたいので、native側でバックキーの処理を行えるようにします。
java側の処理です。
BaseActivity.java
public final static int KEY_BACK = 1; // バックキー
protected static int key_status; // キー入力状態
/******************** バックキー入力 ********************/ @Override public void onBackPressed() { key_status = KEY_BACK; }
{ int _key = key_status; key_status = 0; if ( !updateNative(touch_status, _key) ) { // native部稼働 finish(); break; } else if ( phase != 1 ) { break; } }
onBackPressed()でバックキーの押下を検知して、updateNative()で native側に状態を送る…だけです。
native側です。
SysMain.cpp
/********** 稼働 **********/ JNIEXPORT jboolean JNICALL Java_sys_BaseActivity_updateNative(JNIEnv* env, jobject, jbyteArray touch, jint key) { Renderer::update(); // 描画前処理 SoundManager::update(); // サウンド処理 key_status = key; // キー入力状態
java側から受け取ったバックキーの状態を sys::key_statusにセットする…だけです。やっぱり。
common.h
// キー種類 enum { KEY_BACK = 1, // バックキー };
バックキー押下時の sys::key_statusの値はこちらで定義しています。
サンプルです。
AppMain.cpp
/****************************** 稼働 戻り値 アプリ続行か ******************************/ Bool update_app(void) { sprite[SPR_PHOTO].draw(0.0f, 0.0f); // 背景 for (int i = 0; i < 4; i++) { // ビー玉 int t = ((cnt + i*15) % 60) - 30; sprite[SPR_BALL_BLUE + i].draw(((i*180 + cnt*4) % 720) - 360, 400 - (30*30 - t*t)/2); } cnt++; if ( end_cnt == 0 ) { if ( sys::key_status == sys::KEY_BACK ) { // バックキー sys::SoundManager::play(0, "se.ogg", sys::SoundPlayer::FILE_ASSET); sys::Renderer::fade_out(60); end_cnt = 60; } } else if ( --end_cnt == 0 ) { return FALSE; // アプリ終了 } return TRUE; }
バックキーが押されると、
・サウンド se.oggを再生
・60フレームかけてフェードアウトの後、アプリ終了
という処理になっています。
プロジェクト一式はこちらから。
コメント
トラックバック
このエントリのトラックバックURL: http://raseene.asablo.jp/blog/2013/12/06/7097015/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。