如何从 Java 替换 cocos2d-x 场景?
How to replace cocos2d-x scene from Java?
我想替换 Java 的 cocos2d 项目中的场景。我创建了以下 JNI 方法:
void cocos_android_app_init (JNIEnv* env, jobject thiz) {
LOGD("cocos_android_app_init");
AppDelegate *pAppDelegate = new AppDelegate();
}
extern "C" {
JNIEXPORT void JNICALL Java_com_example_myapp_MainActivity_changeScene(
JNIEnv* env, jobject thiz){
cocos2d::Scene* scene = MyScene::createScene();
Director::getInstance()->replaceScene(
TransitionFade::create( 1, scene ));
//NOT WORKING BECAUSE Director::getInstance() is NULL
}
}
但是,当从 java 调用方法 changeScene 时,我的应用程序崩溃了,因为 Director::getInstance() 似乎是一个 NULL 指针。从Java怎么才能正确改变场景?
您必须在 AppDelegate
中引用 Director::getInstance()
我试过了:
extern "C"
{
void Java_org_cocos2dx_cpp_SceneChanger_nativeCallbackChangeScene(JNIEnv* env, jobject thiz)
{
Director::getInstance()->replaceScene(MyScene::createScene());
}
};
替换场景成功。
你确定 Director::getInstance() 是空指针吗?
确保您 运行正在 OpenGL 线程上。
检查你的错误日志,寻找一行 call to OpenGL ES API with no current context
这意味着你没有 运行ning 在 gl 线程上。
要在 gl 线程上 运行 使用此代码:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([&](){
Director::getInstance()->replaceScene(MyScene::createScene());
});
我想替换 Java 的 cocos2d 项目中的场景。我创建了以下 JNI 方法:
void cocos_android_app_init (JNIEnv* env, jobject thiz) {
LOGD("cocos_android_app_init");
AppDelegate *pAppDelegate = new AppDelegate();
}
extern "C" {
JNIEXPORT void JNICALL Java_com_example_myapp_MainActivity_changeScene(
JNIEnv* env, jobject thiz){
cocos2d::Scene* scene = MyScene::createScene();
Director::getInstance()->replaceScene(
TransitionFade::create( 1, scene ));
//NOT WORKING BECAUSE Director::getInstance() is NULL
}
}
但是,当从 java 调用方法 changeScene 时,我的应用程序崩溃了,因为 Director::getInstance() 似乎是一个 NULL 指针。从Java怎么才能正确改变场景?
您必须在 AppDelegate
中引用 Director::getInstance()我试过了:
extern "C"
{
void Java_org_cocos2dx_cpp_SceneChanger_nativeCallbackChangeScene(JNIEnv* env, jobject thiz)
{
Director::getInstance()->replaceScene(MyScene::createScene());
}
};
替换场景成功。
你确定 Director::getInstance() 是空指针吗?
确保您 运行正在 OpenGL 线程上。
检查你的错误日志,寻找一行 call to OpenGL ES API with no current context
这意味着你没有 运行ning 在 gl 线程上。
要在 gl 线程上 运行 使用此代码:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([&](){
Director::getInstance()->replaceScene(MyScene::createScene());
});