В моей игре, которая делается как для Android, так и для IOS с использованием cocos2dx
, я должен показывать видео (для Android). Я планирую показать это в диалоговом окне (поверх игрового вида). Проблема в том, что у меня нет ссылки на действие для отображения диалога (поскольку диалоги могут отображаться только в действиях). Несмотря на то, что в папке cocos2dx lib есть Cocos2dxActivity
, но я не понимаю, как его использовать. Из кода С++ я вызываю статический метод из класса 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);
}
Статический метод (который находится в обычном классе Java), который я вызываю из кода C++
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
, например это.
Итак, мой путь правильный? Если не прав, предложите способ, как я могу реализовать то же самое. Спасибо.
Изменить:
Наконец-то получил ответ на это. Ранее я пытался работать в потоке пользовательского интерфейса со статическим контекстом приложения, как в этом ссылку, но не получил... с экземпляром активности 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();
}
});
}
}