已有 430 次阅读2014-6-19 16:53|系统分类:Cocos2d|手游研发

这两天连续查阅了js绑定c++的很多文章,有手动与自动两种方式. 本来想用自动绑定的,但是NDK一直下载不下来.....就给算了. 下面总结一下手动绑定的实现过程: 一共三步:1.写原始C++类(一般放在自定义类库里) 2.用C++逐个写成员函数对应的绑定代码(在自定义类库中建立的manual_binding文件夹里) 3.注册所绑定过的函数(在AppDelegate.cpp中添加注册函数) 4.写js代码测试效果 1.原始C++类: //test.h #include"cocos2d.h" USING_NS_CC; classtestbang { public: testbang(); ~testbang(); }; //test.cpp #include"test.h" testbang::testbang() { cclog("testmyfirstbindingctor"); } testbang::~testbang() { cclog("testmyfirstbindingdestroy"); } 2.对应的绑定函数 //jsb_test.h #ifndefTestJavascript_jsb_test_h #defineTestJavascript_jsb_test_h #include"jsapi.h" #include"jsfriendapi.h" voidregister_jsb_test(jscontext*cx,JSObject*global); #endif //jsb_test.cpp #include"jsb_test.h" #include"Scriptingcore.h" #include"test.h" //USING_NS_CC_EXT; JSClass*js_test_class; JSObject*js_test_prototype; JSBooljs_test(jscontext*cx,uint32_targc,jsval*vp) { if(argc==0){ //调用C++构造函数 testbang*cobj=newtestbang(); JSObject*obj=JS_NewObject(cx,js_test_class,js_test_prototype,NULL); JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(obj)); //构造js端对象,将cobj实际对象存入 js_proxy_t*p=jsb_new_proxy(cobj,obj); JS_AddNamedobjectRoot(cx,&p->obj,"TY_test"); returnjs_TRUE; } JS_ReportError(cx,"wrongnumberofarguments:argc,wasexpecting%d.argcmustbe0",argc); returnjs_TRUE; } //虚拟机垃圾回收时的回调函数,第一个参数代表runtime,第二个是被垃圾回收的js对象 voidjs_test_finalize(JSFreeOP*fop,JSObject*obj){ cclOG("jsbindings:finalizingJSobject%p(TY_TCP)",obj); } //入口 voidregister_jsb_test(jscontext*cx,JSObject*global){ js_test_class=(JSClass*)calloc(1,sizeof(JSClass)); js_test_class->name="TY_test"; js_test_class->addProperty=JS_PropertyStub; js_test_class->delProperty=JS_PropertyStub; js_test_class->getProperty=JS_PropertyStub; js_test_class->setProperty=JS_StrictPropertyStub; js_test_class->enumerate=JS_EnumerateStub; js_test_class->resolve=JS_ResolveStub; js_test_class->convert=JS_ConvertStub; js_test_class->finalize=js_test_finalize; js_test_class->flags=JSCLASS_HAS_RESERVED_SLOTS(2); //要注册的属性 staticJSPropertySpecproperties[]={ //脚本层自己通过回调来设定当前的连接状态,这里就不设置了 //{"curState",JSPROP_ENUMERATE|JSPROP_PERMANENT|JSPROP_SHARED,JSOP_WRAPPER(js_tuyoo_Tcpsocket_get_curState),NULL},{0,0} }; //实例函数 staticJSFunctionSpecfuncs[]={ JS_FS_END }; //类函数 staticJSFunctionSpecst_funcs[]={ JS_FS_END }; js_test_prototype=JS_InitClass( cx,global,NULL,//虚拟机内的JSClass类 js_test,//构造函数 properties,funcs,//nostaticproperties st_funcs); //JSObject*obj=JS_NewObject(cx,NULL); //这个对应一个js的构造函数,在js中使用newTY_TCP()的方式来使用这个native的类 //JSObject*jsclassObj=JSVAL_TO_OBJECT(anonEvaluate(cx,"(function(){returnTY_TCP;})()")); //注册到全局变量中 JSBoolfound; JS_SetPropertyAttributes(cx,"TY_TCP",JSPROP_ENUMERATE|JSPROP_READONLY,&found); } 3.注册绑定函数 //AppDelegate.cpp #include"manual_bindings/jsb_test.h" //boolAppDelegate::applicationDidFinishLaunching() sc->addRegisterCallback(register_jsb_test); 4.写js代码测试 vartestobj=newTY_test(); 输出:testmyfirstbindingctor

cocos2dx手写js绑定C++的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5适合的情人节礼物有纪念日期功能

    这篇文章主要介绍了HTML5适合的情人节礼物有纪念日期功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. iOS 10 Safari问题在DOM中不再包含元素

    使用此链接,您可以重现该错误.https://jsfiddle.net/pw7e2j3q/如果您点击元素并从dom中删除它,然后单击链接测试.你应该看到旧的元素弹出选择.是否有一些黑客来解决这个问题?解决方法我能够重现这个问题.问题是,每当您尝试删除其更改事件上的选择框时,iOS10都无法正确解除对选择框的绑定.要解决此问题,您需要将代码更改事件代码放在具有一些超时

  5. ios – 有没有办法针对存档版本(.ipa)运行XCTest(UI)?

    要么我们可以单独构建和测试,以便我们可以先构建并在以后对该构建进行测试吗?

  6. ios app如何“知道”运行单元测试

    我知道我可以用xcodebuild开始我的应用程序的单元测试,但我想知道是什么告诉应用程序在启动期间运行测试,它是一个发送到应用程序的特殊参数,还是以不同的方式编译以运行测试?

  7. ios – 如何在Swift中正确转换为子类?

    我有一个带有许多不同单元格的UITableView,基于数据源内容数组中的内容,它们应该显示自定义内容.在这里我得到了错误UITableViewCell没有属性customLabelQuestionTableViewCell有哪些.我的演员到QuestionTableViewCell有什么问题?解决方法问题不是你的演员,而是你的细胞宣言.您将其声明为可选的UITableViewCell,并且该声明

  8. xcode – 添加OCMock会导致Test启动主应用程序而不是运行测试

    我正在尝试将Ocmock添加到我现有的Cocoa项目中,但我遇到了一个我没有看到其他人覆盖的奇怪问题.我最终将它分离到以下内容:如果我只是将Ocmock.framework引用添加到我的项目中(即以某种方式将其拖到LinkBinaryWithLibraries构建阶段),当我运行测试时,真正的应用程序将被启动.没有Ocmock,输出正常:使用Ocmock框架链接(部分输出):此后,其他应用程序输出

  9. Xcode:用于条件DEBUG / TEST代码的预处理器宏

    我在我的代码(例如AppDelegate.m)中有不应该为单元测试编译的部分,例如当您在创建新项目时选择“添加单元测试”时,目标是由Xcode设置的.在项目文件中,我已将标志CONfigURATION_TESTS添加到内置目标的MyAppTests的预处理器宏中,但未添加到MyApp目标.这是我发现的许多帖子中的建议方式.但是这不起作用,因为(我猜)MyAppTests目标将MyApp目标作为依赖

  10. ios – 嵌套递归函数

    我试图做一个嵌套递归函数,但是当我编译时,编译器崩溃.这是我的代码:编译器记录arehere解决方法有趣的…它似乎也许在尝试在定义之前捕获到内部的引用时,它是bailing?以下修复它为我们:当然没有嵌套,我们根本没有任何问题,例如以下工作完全如预期:我会说:报告!

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部