Cocos2d-x 3.1以降でのAndroidバックキーのKeyCodeはKEY_ESCAPEに

Cocos2d-x 3.3でAndroidのバックキーイベント取得がうまく取れなかったのでメモ。バージョン3.1以降はKeyCodeが「KEY_ESCAPE」に変わった模様。

KEY_BACKSPACEからKEY_ESCAPEに

Cocos2d-x 3.3でAndroidのバックキーイベント取得がうまく取れなかったのでメモ。

バックキーのイベント取得についてググるとKeyCodeが「KEY_BACKSPACE」で取得できるという情報が出てくるが、バージョン3.1以降は「KEY_ESCAPE」に変わった模様。

Because desktop and mobile phones share the same key code, and escape is used as back menu on desktop.

fix keycode_back  from  KEY_ESCAPE to  KEY_BACKSPACE by joshuastray · Pull Request #6853 · cocos2d/cocos2d-x · GitHub

実際にバックキーのイベントを取得する際は、以下3箇所の記述が必要。

ヘッダーファイルにonKeyReleasedを定義

<br />
public:<br />
    void onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event *event);<br />

.cppファイルのinit()にイベントリスナーを追加

<br />
bool HogeScene::init()<br />
{<br />
    if ( !Layer::init() )<br />
    {<br />
         return false;<br />
    }</p>
<p>    auto keyboardListener = cocos2d::EventListenerKeyboard::create();<br />
    keyboardListener-&gt;onKeyReleased = CC_CALLBACK_2(HogeScene::onKeyReleased, this);<br />
    _eventDispatcher-&gt;addEventListenerWithSceneGraphPriority(keyboardListener, this);<br />

onKeyReleased()でバックキーのイベントを取得

<br />
void HogeScene::onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event * event)<br />
{<br />
    if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)<br />
    {<br />
        Director::getInstance()-&gt;end(); // アプリを終了させる<br />
    }<br />
}<br />

ここではKeyCodeを「KEY_ESCAPE」としているが「KEY_BACK」でも同じ扱いらしい。

参考

星影

Tech Hunter代表。フリーランスエンジニア、ブロガー、ゲーマー。
ガジェット、アニメ、ゲーム、インターネットが好きなオタク。
レビューズ公認レビュアー。各種アンバサダー活動もしてます。

コメントを残す

メールアドレスが公開されることはありません。