Я работаю над проектом в 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 в порядке, но почему я не могу перейти к следующей сцене, код правильный!
Спасибо,
Я исправил проблему, кажется, что он должен выполнить в CocosThread, поэтому я сделал так:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([&](){
MenuScene::goToScene();
});
Других решений пока нет …