【问题标题】:How to replace cocos2d-x scene from Java?如何从 Java 中替换 cocos2d-x 场景?
【发布时间】:2015-02-28 23:15:18
【问题描述】:

我想用 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 中正确更改场景?

【问题讨论】:

    标签: java android java-native-interface cocos2d-x


    【解决方案1】:

    我试过这个:

    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这意味着你没有在gl线程上运行。

    要在 gl 线程上运行,请使用以下代码:

    Director::getInstance()->getScheduler()->performFunctionInCocosThread([&](){
        Director::getInstance()->replaceScene(MyScene::createScene());
    });
    

    【讨论】:

      【解决方案2】:

      你必须在 AppDelegate 中引用 Director::getInstance()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多