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
void Application::openURL(const char* url); // à ajouter parmi les membres publics
cocos/platform/win32/CCApplication.cpp
/* 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
void Application::openURL(const char* url); // à ajouter parmi les membres publics
cocos/platform/android/CCApplication.cpp
/* 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 :
import android.net.Uri;
- À ajouter dans la classe Cocos2dxActivity :
public 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 :
CCApplication::getInstance()->openUrl("http://www.example.com");