3

を使用してAndroidとIOSの両方で行われる私のゲームでは、cocos2dxビデオ(Android用)を表示する必要があります。ダイアログ(ゲームビューの上)に表示する予定です。問題は、ダイアログを表示するために参照されるアクティビティがないことです(ダイアログはアクティビティでのみ表示できるため)。でも、cocos2dx lib フォルダーに がありますが、Cocos2dxActivityそれをどのように使用するかわかりません。C++ コードから、以下のように Java クラスから静的メソッドを呼び出しています。

void LMJNICommunicator::showVideo()
{
     LOGD("initialiseDatabase inside LMJNICommunicator");

     jmethodID methodID = 0;
     JNIEnv *pEnv = 0;
     pEnv = getJNIEnv();
     jclass ret = pEnv->FindClass("com/mobinius/lostmonstersclass/LMDatabaseDataManager");
     methodID = pEnv->GetStaticMethodID(ret, "showVideo", "()V");

     if (! methodID)
     {
          LOGD("Failed to find static method id of %s", "showVideo");
          return;
     }

     pEnv->CallStaticVoidMethod(ret,methodID);
     pEnv->DeleteLocalRef(ret);

}

C++コードから呼び出している静的メソッド(通常のJavaクラスにあります)

Class LMDatabaseDataManager {

    public static void showVideo() {

         Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());
         dialog.show();
        // getting Can't create handler inside thread that has not called Looper.prepare() error
    }
}

このHandlerように利用しようとしましたが、結果が得られませんでした(その投稿で同じエラーが発生しました)。また、このような静的を取得しようとしました。Context

それで、私のやり方は正しいですか?正しくない場合は、同じことを実装する方法を提案してください。ありがとう。

編集:

最後にこれに対する答えを得ました。以前、このリンクのように Application static context を使用して UI スレッドで実行しようとしましたが、取得できませんでした... Cocos2dxActivity アクティビティ インスタンスで取得しました。

Class LMDatabaseDataManager {

    public static void showVideo() {        

    Cocos2dxActivity.getInstance().runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());
            dialog.show();            
        }
    });

    }
}
4

1 に答える 1

6

Cocos2dxActivity に適切な行を追加してみてください。

public class Cocos2dxActivity extends Activity {
    private static Cocos2dxActivity instance = null;
   @Override public void onCreate(Bundle b) {
     ...
     this.instance = this;
     }

     public static Cocos2dxActivity getInstance() {
        return instance;
     }



}

ダイアログを作成する場合:

if (Cocos2dxActivity.getInstance() != null)  {
    AlertDialog dialog = new AlertDialog(Cocos2dxActivity.getInstance());
    // rest of your dialog code goes here
}
于 2012-11-15T13:19:00.240 に答える