cocos2dx-jsb 跨语言调用

cocos2dx-jsb 跨语言调用,第1张

概述分类:  cocos2d-x/JSB/Html5 2014-03-06 15:30  779人阅读  评论(0)  收藏  举报 1:C++中调用js方法: 问题:ios中当用户通过home键将游戏转入后台时,调用js中的暂停游戏方法; AppDelegate::applicationDidEnterBackground() 和 applicationDidEnterForeground()方法是 分类: cocos2d-x/JSB/Html5 2014-03-06 15:30 779人阅读 评论(0) 收藏 举报 1:C++中调用Js方法: 问题:ios中当用户通过home键将游戏转入后台时,调用Js中的暂停游戏方法; AppDelegate::applicationDIDEnterBackground() 和 applicationDIDEnterForeground()方法是C++方式处理程序进入后台与前台的代码,在此处添加C++调用Js的代码: //version 2.1.3 Scriptingcore* sc = Scriptingcore::getInstance(); Jsval nsval; Js_GetProperty(sc->getGlobalContext(),sc->getGlobalObject(),"类名",&nsval); if(nsval != JsVAL_VOID) { sc->executeFunctionWithOwner(nsval,"方法名"); } Js中(假设类名plus,方法名:onDIDEnterBackground): var plus = {}; plus.onDIDEnterBackground(){...//code here}; 备注: 使用executeFunctionWithOwner的关键是获取Owner,Js_GetProperty是spIDeMonkey提供的一种获取属性(也是对象)的方式; ========================================================= 2:Js中调用C++方法: 定义C++方法,然后将编写绑定, 以在tableVIEw下增加一个testJs方法为例, 我们在Jsb_cocos2dx_extension_manual.cpp中添加代码: //add manual function to Js static JsBool Js_cocos2dx_CCtableVIEw_testFuncToJs(jscontext* cx,uint32_t argc,Jsval *vp) { if(argc > 0) { Jsstring *string = NulL; Js_ConvertArguments(cx,argc,Js_ARGV(cx,vp),"S",&string); if(string) { JsstringWrapper wrapper(string); cclOG("Jsb binding say: %s",wrapper.get().c_str()); } } return Js_TRUE; }    然后在register_all_cocos2dx_extenstion_manual(jscontext* cx,JsObject* global)末尾行添加一个定义: Js_defineFunction(cx,tmpObj,"testFuncToJs",Js_cocos2dx_CCtableVIEw_testFuncToJs,1,JsPROP_Readonly|JsPROP_PERMANENT); 最后在Js文件中即可调用: cc.tableVIEw.testFuncToJs("hello,Jsb!"); ========================================================= 3:C++调用obj-C 定义oc的.h和.m文件,定义方法: testLog 和 testMessageBox 定义c++的.h文件 定义c++的cpp文件,将后缀名改为.mm .mm文件混编写法如下: #include "supportOC.h" #include "invokeOC.h" voID invokeOC::myinit(){ [supportOC testLog]; [supportOC testMessageBox:@"cocos2d-x调用oc" Title:@"hello"]; }    之后在主程序中引入c++的.h文件后即可使用 invokeOC::myinit()方法; ========================================================= 4:C++和 Java的互调 制作安卓版本时,我们需要使用C++调用java的函数,这个通过jni实现,实例: 在头部引入文件: #include <jni.h> #include "platform/androID/jniHelper.h" 然后定义C++方法: voID callJavaFunc() {   cocos2d::JniMethodInfo t;   if(cocos2d::JniHelper::getStaticmethodInfo(t,"org/cocos2dx/项目名称/类名","java的方法","()V"))   {     t.env->CallStaticVoIDMethod(t.classID,t.methodID);   } } 在c++中调用callJavaFunc()方法或者绑定给Js调用,然后使用NDK编译后在ADT中运行,即可调到java的方法; java调用C++的方法: 首先在java中定义一个public static native voID funcname(); 然后运行时会调用C++中一定命名规则的funcname函数;命名如下: 复制代码 extern "C" {   voID Java_org_cocos2dx_项目名_类名_funcname(jnienv *env,jobject thiz)   {     cclog("jni : java call C++ ");   } } 复制代码 注意这里一定要extern "C",不然java无法找到这个native方法; ========================================================= 总结

以上是内存溢出为你收集整理的cocos2dx-jsb 跨语言调用全部内容,希望文章能够帮你解决cocos2dx-jsb 跨语言调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1019956.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存