2016-03-23 10 views
0

Androidプラットフォーム用のCocos2D-xエンジンを使用してモバイルゲームを開発しています.GPGSを統合したいと考えています。 リーダーボードの表示には成功しましたが、少し面倒な問題があります。リーダーボードが表示されているときに、バックグラウンドでアプリに戻ると、ゲームセンは黒くなります。 OpenGLのコンテキストがリリースされ、再び復元されないと思います。私の意見では、同じ活動を行っているリーダーボードがこれを引き起こすと、ゲームエンジンは何が起こっているのか理解できません。このため、私はインテントを使用して新しいアクティビティでリーダーボード(およびすべてのGPGSのもの)を実行したいと思います。Google PlayサービスIntentHandlerを使用して2番目のアクティビティでC++/UIを実行

GoogleはGoogleのの参照文書で ゲームサービスC++ SDKを再生する「提供」好き、SetOptionalIntentHandlerForUI方法の使用に関するいくつかのあいまい/不明の説明があります。

"startActivityForResultを使用して、提供されたUIインテントを任意の時点で開始できる機能を提供します。"

「提供」の意味は何ですか?提供されるインテントとは何ですか? startActivityForResultメソッドはどのように使用しますか?残念ながら、 "使用する"と "提供する方法"は、コーディングの明確な表現ではありません。 GPGS for C++のドキュメントには、 に関するサンプルはありません。結局、 Googleの文書が非常に貧しく、 インターネット上に有用な情報がありません。 Googleの誰かが私を助けてくれたら、とても幸せになれます。

私はこのようなコードを書いています。しかし、起動時にエラーが発生します。

AppActivity.java

public void runGPGSActivity(Intent i) { 
    startActivityForResult(i,100); 
} 

AndroidPlatformConfiguration.h(C++ GPG LIBから)

typedef std::function<void(jobject)> IntentHandler; 

AndroidPlatformConfiguration &SetOptionalIntentHandlerForUI(
IntentHandler intent_handler); 

main.cppに(JNIは、作業コードを結合、GPGSは同一の活性上で実行)

gpg::AndroidPlatformConfiguration platform_configuration; 
platform_configuration.SetActivity(activity); 
StateManager::InitServices(... 

main.cpp(JNIバインディング、GPGSは新しいアクティビティで実行する必要があります)

gpg::AndroidPlatformConfiguration platform_configuration; 

jclass activityClass = env->FindClass("org/cocos2dx/cpp/AppActivity"); 
jmethodID jIntentHandlerMethodID = env->GetMethodID(activityClass,"runGPGSActivity","(Landorid/content/Intent;)V"); 
jobject jIntentHandler = env->NewObject(activityClass, jIntentHandlerMethodID); 

gpg::AndroidPlatformConfiguration::IntentHandler mIntentHandler; /*= [](jobject mjIntentHandler){};*/ 
std::function<void(jobject)> intentHandler = std::bind(mIntentHandler,jIntentHandler); 

platform_configuration.SetOptionalIntentHandlerForUI(intentHandler); 
platform_configuration.SetActivity(activity); 

StateManager::InitServices(

ビルドエラーはありませんが、起動時にアプリケーションがクラッシュします。

3月24日14:12:24.301:A/libcの(21352):致命的な信号6(SIGABRT) で0x00005368(コード= -6)、スレッド21352(メイン)

そしてこの問題についていくつかのリンク:

IntentHandler reference

StartActivityForResult reference

///は、事前にありがとうございます。 ///

+0

誰か助けてくれますか? –

答えて

0

...私は問題を解決しましたが、IntentHandlerメソッドを使用しませんでした。

私のアプリでこのコードを使用して、毎週のリーダーボードデータを表示していました。私は戻って、このコードに戻ってきました

gameServices->Leaderboards().ShowUIBlocking(leaderboardId,gpg::LeaderboardTimeSpan::WEEKLY); 

しかし、戻り値は、それが(それが何であれ)UIStatusで、空ではありません

、アプリは今、黒い画面に行くのではありません。このメソッドはvoidを返します。私はShowUIBlockingメソッドを使用しているときに、そのUIStatusのものでコールバックをキャッチしなければならないと思います。

gameServices->Leaderboards().ShowUI(leaderboardId); 

しかし、私はリーダーボードのタイムパン機能を利用できません。

私はそれをどのように使用できるか研究するつもりです。今は問題ありません。しかし、SetOptionalIntentHandlerForUIのドキュメントは、それを使用したいプログラマーにとってより明示的に書かなければなりません。

関連する問題