您现在的位置是:主页 > 叶巷 > 【cocos2d-x从c++到js】09:JS与C++的交互1——JS代码调用C

http://tallinncar.com/yx/331.html

【cocos2d-x从c++到js】09:JS与C++的交互1——JS代码调用C

时间:2019-07-22 21:09  来源:未知  阅读次数: 复制分享 我要评论

  之前我们讲过,在游戏启动时,我们要通过SpiderMonkey引擎的注册接口,向SpiderMonkey注册响应的从C到JS的绑定函数,这些函数用于把JS函数挪用代码转换成对应C函数挪用来施行。

  能够看到上面导入了Cocos2d-x的各类库,焦点库,扩展,opengl,物理引擎,websocket,CCB等等等等。

  下面我们说JS代码若何挪用C代码。

  起首,在建立JS对象的时候,也会建立一个对应的C对象。换句话说,JS对象是和C对象逐个对应的(当然必需是引擎支撑的,并且绑定了接口的)。然后,在JS对象施行函数时,发生了什么呢?SpiderMonkey引擎会通过注册的接口,找到对应的C对象,挪用该对象上对应的C函数。

  换句话说,若是有下面的JS代码:

  那么颠末SpiderMonkey施行后,会挪用下面的代码:

  当然,SpiderMonkey远远还不止干了这些,还做了良多事,好比绑定和查找JS和C对象的对应关系,包装参数为对应类型,类型平安查抄,前往包装等等。要晓得他干了些什么,间接看引擎代码是更好的选择。

  在Cocos2d-x 3.0版的引擎中,引擎目次布局进行了大规模重构。

  两个脚本言语被放到一个类的目次中。此中auto-generated/js-bindings文件夹是gxx-generator东西主动生成的所有C绑定JS代码。而javascript/bingdings文件夹是手写的绑定代码,由于东西无法做到完全主动绑定,所以必需有一部门手写的(脚本言语都是如许,习惯就好了,感谢)。

  这就是cc.Node.create()施行时,底层C跑的代码。所有的通过JS挪用C的代码都与这个形式很是分歧,起首看函数接口:

  第三个参数jsval *vp是JS代码中的具体参数

  这个代码再熟悉不外了,尺度的Cocos2d-x静态工厂生成对象的代码

  留意这个模板函数,get_or_create,这就是把JS对象和C对象绑到一路的函数。他很是主要,留意JS和C对象是逐个对应关系,理解这个特效,有助于我们操纵JS言语的动态性进行更便利的编程。绑完之后,下面阿谁函数是用于获得前往。

  最初,函数都要前往一个JSBool,概况这个函数施行能否成功。若是前往JS_FALSE,还会通过JS_ReportError打印一条报错消息。留意!脚本言语有一个特点,若是函数运转失败了,则该函数后面的函数(在统一感化域中的)城市跳过施行。

  继续看下一个函数

  这个函数和前一个函数的区别是,这个函数有参数,而且他是一个类成员函数(上一个是类静态函数),所以,这里要有this指针。

  这一大段函数都在找阿谁this指针。留意,这里面有一个Cocos2d-x引擎经常呈现的错误提醒Invalid Native Object。底层C对象被收受接管了,所以找不到了。

  CCNode::setVisible(xx)只要一个参数,所以先判断JS的参数个数为1。JS_ValueToBoolean完成JS对象到C对象的转换,留意!这是根基类型的转换,和查找对应的对象指针分歧。你在gxx-generator生成的代码中会看到大量的这种转换。每次转换都要进行成果判断,若是失败,就打印错误消息。后面是间接挪用对应C对象的setVisible,以及设置前往。

  很繁琐不是吗?若是这种代码全数手写是不是会死人呢。必定的吧。所以这些代码都是用脚本生成器做出来的(绝大部门)。

  后面我们会继续讲解各类JS的绑定代码。

  本文出自 “做游戏的老G” 博客,请务必保留此出处

  1、博文来自:w的专栏

  我们要通过SpiderMonkey引擎的注册接口,向SpiderMonkey注册响应的从C++到JS的绑定函数,这些函数用于把JS函数挪用代码转换成对应C++函数挪用来施行。11...博文来自:LANGZI7758521的专栏

  【步卒cocos-js】js绑定&&c++挪用JsbyEOS.闲暇之于,把之前写过的工具,拿出来福利一下大师=、=...博文来自:博客 by EOS.

  在SpiderMonkey施行时,经常要把JS中的数据类型转换成C++类型,好比int,unit,string,各类容器等等。转换之后,才可以或许给对应的C++函数传送参数,来完成对应的C++函数的挪用。...博文来自:LANGZI7758521的专栏

  1,JS与C++互调2,JS与Java互调3,JS与OC互调博文来自:专注,勤奋,勤恳

  对于利用游戏引擎开辟游戏而言,你选择何种言语并不主要,主要的是你对这个游戏引擎的理解和控制,你对开辟游戏的实践和感悟,终究一种游戏引擎常常支撑良多言语开辟,分歧的项目利用的言语也可能很纷歧样。——有些...博文来自:秋梦尘的博客

  在一个编纂功能里,把数据库里的调集消息输出到前台页面展现,我们凡是会利用c:foreach遍历输出。若何在c:foreach里挪用js代码呢?我是如许实现的。场景引见:...博文来自:huangbaokang的博客

  比来感受一个时间转换的C库挺好用的,但不想做成C扩展,并不是说C扩展难,对于我来说好歹也是写过一些C扩展的,次要是C扩展对情况有一些依赖,好比非win下需要node-gyp做为情况支撑来进行编译,对使...博文来自:weixin_33794672的博客

  研究他们之间的通信对我来说次要是是为领会决在lua中利用protobuff,能够把收集部门放在C++中编写,lua只需把protobuff生成的字符串转给C++收集库就能够了。其实lua与C++和与C...博文来自:Mage的专栏

  参考 参考参考博文来自:wyr0924的专栏

  《Cocos2d-x实战 C++卷》上线了感激大师不断以来的支撑! 全面引见Cocos开辟技巧,采用Cocos2d-x3.2版本,而且细致引见跨平台移植曾经多平台发布细节。· 各大商铺均起头发卖:京东...博文来自:「智捷讲堂」关东升的博客

  这是最初一周了,最初我们的C++课要做一个游戏,对于我这种比力懒的,外加是一个C++小白,就是在网上找一些源码,搭建一个情况,把Demo运转以来就能够了。这个工作我也是弄了一个晚上加一个上午,从小白到...博文来自:New soul

  CEF中的JavaScriptCEF操纵V8JS引擎来实现JS。浏览器中的每一个frame都有本人的JS上下文,JS只能在该上下文中施行。JS只能在衬着历程中的TID_RENDERER线程中施行。相关...博文来自:CAir2的专栏

  布景:  目前nodejs挪用c++支流的有两种方式,别离是addons和ffi  addons是nodejs官方的c++扩展实现方案,可是因为需要利用模版,而且要对v8引擎有必然的领会,入门门槛较高...博文来自:LiWang112358的专栏

  cocos情况搭建(细致过程),源码导入与源码错误点窜:博文来自:不因俊俏难为友,正为风流始读书

  用cocos2dx开辟游戏后,移植到android后,由于android挪用C++代码生成的.so库,一旦C++代码呈现问题,仅靠打印代码输出消息那是远远不敷的,正所谓欲先攻其事,必先攻其器,仍是得配...博文来自:Tengs world

  WebBrowser内嵌的网页中JS与当地C++代码能够彼此挪用,如许就能够最大程度操纵C++强大的计较能力和与当地硬件通信。本文细致演示了JS和C++代码互相挪用的方式,JS挪用C++的类独立封装可...博文来自:文洲的专栏

  相关文件夹:cocostudio--解析ui--控件查找体例:起首在cocostudio里的reader里找到对应的reader,能够找到各类属性以及载入体例,然后到ui里找到对应的控件类,能够找到该...博文来自:胡老哈的进修记实

  办事器源码用:框架MyJSGame,其它的都是默认生成的,本人添加了 te...博文来自:chuanyu的专栏

  又是一个周末,在博客上留点工具吧 在线JS转C#代码东西根基上都能够翻译过来...博文来自:逆袭的博客

  JS若何挪用C函数接口(文章中的图片不晓得为何无法拷贝,不外都是些错误提醒,影响不大,所有有部门图片没有上传) 参考案例1:博文来自:zts990324的博客

  寺人的缘由:  时隔两年,VC与JavaScript交互系列的最初一篇关于JavaScript若何挪用c++的文章终究出炉了。为什么会隔了那么久?由于本来筹算寺人的,可是看到热情的网友们的眼神,从期望...博文来自:软件架构农

  比来也是换了份新工作.搞棋牌平台了...标新立异呵呵.哥哥利用node.js来开辟这套东东..公司什么根柢也没有.在西安就如许吧......比来正在搞扑克...因为是办事器良多逻辑都是js的所以..希...博文来自:Enel的部落阁 - Timeshift()

  1.涉及到的学问前端言语:javascript,html,若是能够的话,再来一个CSS用于设想样式后端言语:Java前端手艺:ajax(能够用JQ框架,简单又高效。可是但愿用原生代码来写,容易搞懂道理...博文来自:csdn_xuebing的博客

  博文来自:杨伟乔-一个极客的世界

  法式员浪漫剖明“三行情书”一等奖(

  +CSS3)

  12-04

  场景一:通过纯CSS3实现的 情书动态翻阅结果,共三页,每页一句情话。 场景二:通过JS和CSS3组合实现的 碎片漂荡结果。每个碎片都由一句情话构成,无数的情话碎片形成了心型。在【情歌】陪伴下,当所有【情话】碎片飞开后,便呈现了更高的豪情...

  jquery/js实现一个网页同时挪用多个倒计时(最新的)

  jquery/js实现一个网页同时挪用多个倒计时(最新的)nn比来需要网页添加多个倒计时. 查阅收集,根基上都是千遍一律的欠好用. 本人按需写了个.但愿对大师有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  PHP是能让你生成动态网页的东西之一。PHP网页文件被看成一般HTML网页文件来处置而且在编纂时你能够用编纂HTML的常规方式编写PHP。比来在折腾阿谁安卓扫码登录的功能,然后网页端是用php的做了,...博文来自:朱培(知浅_ZLH)

  今天把本人破费一个月摆布拾掇的600多款小法式源码发布出来,当前每个月还会持续更新,很大一部门都带有后台源码并包含有小法式上线教程,帮你分分钟上线本人的小法式,下面我们来看看目次截图,最初面会把源码目...博文来自:明礼馨德的博客

  媒介本文是对之前的一篇文章Spring+SpringMVC+mybatis+Quartz整合代码部门做的一个点窜和弥补, 此中最大的变化就是后台框架变成了Spring Boot。本工程所用到的手艺或工...博文来自:天降风云的博客

  没有更多保举了,前往顾页