仕事でC++を使うため勉強ついでに何か結果を残せないかと思い、cocos2dxでのandroidアプリの開発をしてみました。

■cocos2dxの開発環境の導入
ぎじゅつめも
開発環境の導入では、上記サイトが非常に参考になりました。

■githubにてソースコードの公開
https://github.com/highcom/test-program.git
上記リンクにてソースコードを公開していますので参考にしてみてください。

■androidアプリ「便利電卓」を公開
便利電卓 by google play
上記リンクにてアプリを公開しています。



cocos2dxの開発環境の導入が完了すれば、ビルドして実行すると画面の表示までいけると思います。以下からは、androidアプリにするために行った設定です。



■マルチディスプレイへの対応
1つの画面サイズを基準としてレイアウトを作成し、それより大きい/小さい画面サイズの場合にはレイアウトを維持したまま拡大/縮小されるようにする設定です。

AppDelegate.cppファイルを以下のように修正します。
画面サイズの基準を480×800としています。
if(!glview)の外側でsetDesignResolutionSize関数を呼び出さないとうまくいきません。

<修正前>
bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::create("My Game");
        director->setOpenGLView(glview);
    }
・・・

<修正後>
bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::create("My Game");
    }
    glview->setDesignResolutionSize(480, 800, ResolutionPolicy::SHOW_ALL);
    director->setOpenGLView(glview);
・・・

■バックキーによるアプリの終了
1.ヘッダファイルに以下の関数を定義する。
void onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event *event);

2.ソースファイルのinit()関数の中に以下のイベントリスナー関数を定義する。
auto keyboardListener = cocos2d::EventListenerKeyboard::create();
keyboardListener->onKeyReleased = CC_CALLBACK_2(CalculationScene::onKeyReleased, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(keyboardListener, this);

3.onKeyReleased()関数でバックキーイベントを取得する。
void CalculationScene::onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event * event)
{
    // バックキーイベント
    if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)
    {
        Director::getInstance()->end(); // アプリを終了させる
    }
}

■admobの広告表示
Cocos2d-x 3.5 AdMobのバナー広告を実装する(iOS, Android)
上記のサイトが非常に参考になりました。

■admobの追加によるビルドエラーが起きた場合
[Androidアプリ]AdMobでエラーが出てコンパイルが通らない
ビルドターゲットをAPI Level 13以上にすれば良いです。
ちなみに、Android3.1.xのAPI Levelが12以下の端末にはインストールできますが広告は表示されません。
Android3.2のAPI Levelが13以上の端末であれば広告の表示が確認できます。

■apkファイルを作ろうとしたときにエラーが起きた場合
apkファイル作成時に「is not translated in ja」のエラー
google playで公開するために、Export Signed Application Packageを行った際に出ました。
上記サイトにあるように、プロジェクトを右クリック⇒プロパティ⇒Android Lint Preferences⇒MissingTranslationのLintのエラーレベルをWarning以下にしてあげれば良いみたいです。