を使用して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();
}
});
}
}