Il fallait que j’intègre des boutons dans un projet cocos2d-x pour rediriger sur des pages de réseaux sociaux. Mais à mon grand regret, il n’existe pas de fonction préparée dans le framework de cocos2d-x (version 3.2) pour ouvrir une page de navigateur. Il m’a alors fallu l’implémenter moi-même.
Content.
Fort heureusement, des personnes se sont déjà penchées sur la question et une source m’a été particulièrement utile. Pour info, ce qui va suivre pourrait aussi servir à ouvrir des fichiers en local (file://) ou toute ressource pointable par un URI (tant qu’il y a un logiciel qui peut gérer cet URI, of course) ! Mes chers lecteurs francophones (parce qu’aucun anglophone ou autre ne viendrait ici huhu), voici un récapitulatif :
Partie Windows
cocos/platform/win32/CCApplication.h
1void Application::openURL(const char* url); // à ajouter parmi les membres publicscocos/platform/win32/CCApplication.cpp
12345/* Opens URL in browser. */void Application::openURL(const char* url){ShellExecuteA(NULL, « open », url, NULL, NULL, SW_SHOWNORMAL);}
Partie Android
cocos/platform/android/CCApplication.h
1void Application::openURL(const char* url); // à ajouter parmi les membres publicscocos/platform/android/CCApplication.cpp
12345678910111213141516/* Opens URL in browser. */void Application::openURL(const char* url){JniMethodInfo minfo;if (JniHelper::getStaticMethodInfo(minfo,« org/cocos2dx/lib/Cocos2dxActivity »,« openURL »,« (Ljava/lang/String;)V »)){jstring StringArg1 = minfo.env->NewStringUTF(url);minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, StringArg1);minfo.env->DeleteLocalRef(StringArg1);minfo.env->DeleteLocalRef(minfo.classID);}}cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java- À ajouter dans les imports si ce n’est pas déjà fait :
1import android.net.Uri; - À ajouter dans la classe Cocos2dxActivity :
12345public static void openURL(String url) {Intent i = new Intent(Intent.ACTION_VIEW);i.setData(Uri.parse(url));sContext.startActivity(i);}
- À ajouter dans les imports si ce n’est pas déjà fait :
Partie iOS (quand j’en aurai besoin :P)
Conclusion
Et voilà ! Désormais, pour ouvrir la page, appelez la méthode openUrl ainsi :
|
1 |
CCApplication::getInstance()->openUrl(« http://www.example.com »); |