2017-09-13 2 views
0

Je travaille sur un projet en Cocos2d-x (Latest) dans lequel j'ai travaillé avec Google Play Game Services, j'ai rencontré plusieurs problèmes lorsque j'ai essayé d'intégrer Google Play Services avec C++ puis j'ai décidé de passer à JAVA.Appel d'une fonction C++ de Java JNI - Cocos2d-x

Lorsque l'utilisateur cliquez sur le bouton « Inviter un ami », le (startGame méthode ) est appelé avec succès JNI, mais rien ne se passe! La scène suivante ne s'affiche pas.

C++ code:

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); 
} 

du code Java où la fonction ci-dessus est appelée:

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); 

} 

La communication entre C++ et Java est très bien, mais pourquoi je ne peux pas aller à la scène suivante, le code est correct!

Merci,

Répondre

0

je fixe le problème, il semble qu'il doit exécuter dans CocosThread donc je l'ai fait comme ça:

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