2015年12月21日

Cocos2d-xでAndroidアプリを開発する環境を作る

今回、Androidアプリの開発に始めてチャレンジしてみたので、開発環境構築のメモ。すでにCocos2d-xでiOSアプリを開発済みの状態を前提としています。

Android Studioのインストール

まずはAndroid Studioのダウンロードとインストール。Android Studio と SDK Tools のダウンロード | Android Developers

インストールは適当にNext、Nextと選択。途中Install Typeを選択するところが出ますが、よくわからないので”Starndard”を選択。

スクリーンショット 2015-11-29 14.56.34.png

インストールが終わるとAndroid Studio Setup Wizardが起動するので、”Configure” -> “SDK Manager”を選択。

スクリーンショット 2015-11-29 15.09.08.png
スクリーンショット 2015-11-29 15.10.15.png

左側のツリーから”Android SDK”を選択して、上の方のタブで”SDK Tools”を選択。”Android NDK”にチェックを入れます。それから”OK”ボタンを選択。

スクリーンショット 2015-11-29 15.12.47.png

ダウンロードとインストールが行われるので終わるまで待ちます。

次にCocos2d-xのsetup.pyを実行して、Android SDKとAndroid NDKのインストールパスを環境変数に設定します。標準でインストールすると以下のパスになるっぽいです。

Android SDKのインストールパス: /Users/ユーザー名/Library/Android/sdk
Android NDKのインストールパス: /Users/ユーザー名/Library/Android/sdk/ndk-bundle

setup.pyを実行して
->Please enter the path of NDK_ROOT (or press Enter to skip):と表示されたらAndroid NDKのインストールパスを入力、
->Please enter the path of ANDROID_SDK_ROOT (or press Enter to skip):と表示されたらAndroid SDKのインストールパスを入力。
あとはそのままEnterで良いはずです。

cppファイルの追加

Android.mkファイルに作成したcppファイルを追加します。Googleで検索するとClasses下のcppファイルを全部検索してコンパイルするような書き方が見つかりますが、Cocos2d-Xが作るフォルダ構成でAndroid Studio用とEclipse用でちょっと違いがあるので、Android Studioのときは../が1個多くなるので注意です。

# cppファイルの自動検索設定
ifeq ($(HOST_OS),windows)
  CPP_FILES := $(shell dir $(LOCAL_PATH)/../../../Classes/*.cpp /b/a-d/s)
else
  CPP_FILES := $(shell find $(LOCAL_PATH)/../../../Classes -name *.cpp)
endif

LOCAL_SRC_FILES := hellocpp/main.cpp
LOCAL_SRC_FILES += $(CPP_FILES:$(LOCAL_PATH)/%=%)

# headerフォルダの自動検索設定
ifeq ($(HOST_OS),windows)
  LOCAL_C_INCLUDES := $(shell dir $(LOCAL_PATH)/../../../Classes /b/ad/s)
else
  LOCAL_C_INCLUDES := $(shell find $(LOCAL_PATH)/../../../Classes -type d)
endif

リソースの取扱い

Cocos2d-XではデフォルトでResource下を全部コピーするようになっているようです。たいてい、Resouce下に画像とかを置いているので問題ないのですが、Xcodeだとフォルダ構成を維持せずに登録していたりできるので、フォルダ構成を意識せずにプログラミングしたりしていたのですが、これだとAndroidだと正常に動きません。

ターゲットのOSで処理を分けても良いのですが、めんどくさいのでXcode側でフォルダ構成含めて登録して(ツリー上で青いフォルダになるやつ)、プログラム中でパスを指定するようにしました。

Android Studioでプロジェクトを開いてみる

Android Studio Setup Wizardの”Open an existing Android Studio project”を選択して、”proj.android-studio”フォルダを指定してやれば開くことができます。

実行環境の準備

Android Studioのメニューから”Tools” -> “Android” -> “AVD Manager”を選択して、Android Virtual Device Managerを起動。適当に仮想デバイスを作成します。Cocos2d-xを動かす場合にはCPUの種類がarm系でないといけないようです。

実機を持っている場合は設定から”タブレット情報”を選択して、”ビルド番号”の所を何回かタップすると開発用端末として設定されます。そうすると設定の項目に”開発者向けオプション”が追加されるので、その中の”USBデバッグ”を有効にします。

ビルドと実行

あとは次のコマンドでビルドと実行ができるはずです。

cocos run -s /Users/kaneda/Dropbox/src/toritoma -p android --android-studio
ラベル:android cocos2d
posted by かねだ at 00:02| Comment(0) | 開発方法メモ | このブログの読者になる | 更新情報をチェックする

2015年12月13日

とりとまiOS版リリースしました

ようやく、とりとまのiOS版をリリースしました。

あまりにもアプリ開発が滞っていたので、ブログを更新するのを休んで少しでも早くリリースしようと思っていたのですが、あんまり効果はありませんでした。

とりあえず、App Storeのリンクです。



Android版はまだ開発中です。cocos2d-xなのでゲームの部分はほとんどそのまま動くようですが、ネイティブコードの部分は一から作らないといけないのでボチボチやっていこうかと思います。

ちなみにダウンロード数は今週1週間で56ダウンロード。たぶん最初の1周間がピークだと思うので、100DLにも届かずに終わってしまいそうな感じです。

傾撃の時には何もしなくても1000DLくらい行っていたので数年前と比べると、ゲームアプリも充実してきて、ただアプリを公開しただけでは簡単にはダウンロードされなくなったということでしょうか。
ラベル:とりとま
posted by かねだ at 22:28| Comment(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2015年05月17日

cocos2d-xでTwitter投稿

今週はTwitter機能を実装していたのでメモ。一番手間が少なそうな標準のツイート投稿ビューを表示する方法です。ちなみに、調べている途中でPlugin-Xというネイティブコード連携のための仕組みがあることに気付きましたが、今回は面倒なので普通に作ることにしました。

なお、スクリーンショットをツイートするところは【cocos2dx】ソーシャルメディアへの「スクリーンショット」を工夫するを参考にしました。

まずはRootViewControllerにTwitterの投稿ビューを表示する関数を追加。

- (void)postTwitterMessage:(NSString *)message URL:(NSURL *)url Image:(UIImage *)image
{
    // Twitterが使用可能な場合のみ処理を行う
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {

        // Twitter投稿ビューを作成する
        SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

        // 完了時のハンドラを設定する
        [composeVC setCompletionHandler:^(SLComposeViewControllerResult result) {

            // Twitter投稿ビューを閉じる
            [self dismissViewControllerAnimated:YES completion:nil];

        }];

        // 投稿するテキストの初期設定を行う
        [composeVC setInitialText:message];

        // 投稿するURLの設定を行う
        if (url != nil) {
            [composeVC addURL:url];
        }

        // 投稿する画像の設定を行う
        if (image != nil) {
            [composeVC addImage:image];
        }

        // Twitter投稿ビューを表示する
        [self presentViewController:composeVC animated:YES completion:nil];
    }
}

次にC++からネイティブコードを呼び出すためのクラスを作成。今回はそのままTwitterというクラス名にしました。

void Twitter::post(const char *message, const char *url, const char *imagepath)
{
    // RootViewControllerを取得する
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    if (window == nil) {
        window = [[UIApplication sharedApplication].windows objectAtIndex:0];
    }

    // RootViewControllerであることを確認する
    if ([window.rootViewController isKindOfClass:[RootViewController class]]) {

        // RootViewControllerにキャストする
        RootViewController *rootViewController = (RootViewController *)window.rootViewController;

        // 投稿画像を開く
        UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithCString:imagepath encoding:NSUTF8StringEncoding]];

        // ネイティブコードのTwitter投稿ビュー表示処理を呼び出す
        [rootViewController postTwitterMessage:[NSString stringWithCString:message encoding:NSUTF8StringEncoding]
                                           URL:[NSURL URLWithString:[NSString stringWithCString:url encoding:NSUTF8StringEncoding]]
                                         Image:image];            
    }
}

最後にSceneからスクリーンショットを保存する処理と上のツイート投稿関数を呼び出す処理を作成します。

最新のcocos2d-xならスクリーンショットを保存するためのRenderTexture::saveToFile()にコールバック関数を渡すことができるので、保存が終了した後にツイートの処理ができるのですが、私が今使っているバージョンが3.1と古いもののため画像保存終了のタイミングがわかりません。

幸い、今回のアプリではツイートはゲームオーバー時にしかできず、ゲームオーバーになってからゲームオーバー画面が出るまでに若干ラグを設けているので、ゲームオーバーになった瞬間にスクリーンショットを撮ることで解決しました。本来は最新版を使うべきなんでしょうが。

とりあえずスクリーンショットを撮る処理。なおwidthheightCCDirector::getInstance()->getVisibleSize()で取得した値です。

// スクリーンショット用テクスチャを作成する
RenderTexture *texture = RenderTexture::create(width, height);
texture->setPosition(cocos2d::Vector2(width / 2, height / 2));

// スクリーンショットを撮り始める
texture->begin();

// 画面の描画
this->visit();

// スクリーンショットを撮り終える
texture->end();

// スクリーンショットを保存する
texture->saveToFile("screenshot.png", cocos2d::Image::Format::PNG);

最後にツイートボタンを押された時の処理を作成して終わりです。

// スクリーンショットの保存先パスを作成する
std::string fullpath = FileUtils::getInstance()->getWritablePath() + "screenshot.png";

// ツイートビューを表示する
Twitter::post("ツイート内容", "アプリのURL", fullpath.c_str());
ラベル:とりとま cocos2d
posted by かねだ at 23:01| Comment(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。