Android — вызов функции C ++ из Java JNI — Cocos2d-x

Я работаю над проектом в Cocos2d-x (последняя версия) в которой я работал с игровыми сервисами Google Play, я столкнулся с несколькими проблемами при попытке интегрировать сервисы Google Play с C ++, а затем решил перейти на JAVA.

Когда пользователь нажмите на кнопка «Пригласить друга» метод startGame () успешно вызывается с JNI, но ничего не происходит! Следующая сцена не отображается.

Код C ++:

extern "C"{
JNIEXPORT void JNICALL Java_sonar_systems_frameworks_GooglePlayServices_GooglePlayServicesGameHelper_startGame(JNIEnv* env, jobject thiz);
};

JNIEXPORT void JNICALL Java_sonar_systems_frameworks_GooglePlayServices_GooglePlayServicesGameHelper_startGame(JNIEnv* env, jobject thiz)
{

MenuScene::goToScene();

}
void MenuScene::goToScene() {

//Going to the next scene
Scene * gameScene=GameScene::createScene();
TransitionFade*transition=TransitionFade::create(TRANSITION_TIME, gameScene);
//Replace the current Scene with New Game Scene
Director::getInstance()->replaceScene(transition);
}

Java-код, откуда вызывается вышеуказанная функция:

private native void startGame();
public void inviteFriend() {

startGame();

// launch the player selection screen
// minimum: 1 other player; maximum: 3 other players
//Intent intent = Games.RealTimeMultiplayer.getSelectOpponentsIntent(mGoogleApiClient, 1, 1);
//((Activity) GooglePlayServices.ctx).startActivityForResult(intent, RC_SELECT_PLAYERS);

}

Связь между C ++ и Java в порядке, но почему я не могу перейти к следующей сцене, код правильный!

Спасибо,

0

Решение

Я исправил проблему, кажется, что он должен выполнить в CocosThread, поэтому я сделал так:

 Director::getInstance()->getScheduler()->performFunctionInCocosThread([&](){
MenuScene::goToScene();
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]