【发布时间】:2012-11-14 10:45:09
【问题描述】:
在我使用cocos2dx 为Android 和IOS 完成的游戏中,我必须显示视频(适用于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
}
}
我尝试像this 一样使用Handler,但没有得到结果(在那篇帖子中有同样的错误)。
还尝试获取静态Context,如this。
那么,我的方法正确吗?如果不正确,请建议我如何实现相同的方法。谢谢。
编辑:
终于得到了答案。早些时候,我尝试在带有应用程序静态上下文的 UI 线程上运行,如 this 链接,但没有得到......我得到了 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();
}
});
}
}
【问题讨论】:
-
您没有将视频叠加在 Activity 上吗?
-
实际上没有......正如我在问题中解释的那样,thr 是一个名为 Cocos2dxActivity 的活动,其中 GLSurfaceView n 都在运行......我不知道我是否可以使用它
标签: java android dialog cocos2d-x android-context