@a6428965 写道:
一些官方有的文档我就不重复了,只是简单记录下自己的研究。暂时版本1.2.2
1、creator的默认编辑器使用的引擎路径
cocos2d-x引擎路径在 creator安装文件夹\resources\cocos2d-x下,这个是构建发布原生平台版本的时候才用到,非link模式下,复制一份该引擎源码到发布路径下。默认已经编译好模拟器exe在该路径\simulator\win3下,每次运行预览也是在这个路径下刷新资源。
JavaScript 引擎(也就是Creator-JS引擎)在creator安装文件夹\resources\engine下,这个是creator主要作用的代码,大部分UI组件代码都是在这里写的,发布的时候会默认打包所有js文件成一个jsb_polyfill.js,默认会有一份编译好的在该路径\bin下,每次代码更新都会在这里复制一份到模拟器路径下。2、分辨率适配
creator的canvas分辨率适配是没有EXACT_FIT即拉伸铺满屏幕,有需要的话得自己改,话说搞不懂别的模式都搞了,这个模式为什么不来个字段适配下,可以自己修改Creator-JS引擎下的CCCanvas.js文件里面的处理来实现,具体修改applySettings函数,相信大部分人都能看懂改哪,我是将NO_BORDER修改成EXACT_FIT。值得注意的是,默认编辑器你需要直接修改jsb_polyfill.js里面的那段函数才可以,因为他不会重新编译一次Creator-JS引擎(或许有什么条件下会,但我不清楚)3、事件管理
节点的事件管理是个坑,他是冒泡传递的,也就是只能从孩子节点传给父节点,而无法从父节点传到孩子节点,限制很大,而eventManager只能监听无法发送消息,所以需要自己重新写一套来实现功能,这里写个全局事件管理器来处理,可以参考节点的事件管理,写一个EventMgr.js,简单写了个,具体如下(function () { var list ={}; var __EventMgr = { //注册消息 on:function(key,func,node) { if(list[key] == null){ list[key] =[]; } var d = {}; d.func =func; d.node = node; list[key].push(d); }, //移除一个消息 remove:function(key,func,node) { if(list[key]){ for(var i=0; i<data.length;i++){ if(data[i].node == node && data[i].func == func) { data.splice(i,1); --i; } } } list[key].push(func); }, //移除node所有消息 removeByNode:function(node) { for ( var p in list ){ var data = list[p]; for(var i=0; i<data.length;i++){ if(data[i].node == node) { data.splice(i,1); --i; } } } }, //移除key注册的所以消息 removeByKey:function(key) { delete list[key]; }, //遍历通知消息 emit:function (key,arg) { if(list[key]){ var funcs = list[key].concat(); for(var i=0;i<funcs.length;i++){ if((funcs[i].node instanceof cc.Component)) { if( cc.isValid (funcs[i].node) ){ funcs[i].func(arg,funcs[i].node); } } else{ funcs[i].func(arg,funcs[i].node); } } } } }; window.EventMgr = __EventMgr; })();
因为引擎开始加载js脚本的时候,会执行一遍js代码,所以默认就会把EventMgr加到全局变量里,这里只是一个全局分发消息的处理,可以自己扩展改进需要的功能,一般简单的事件分发用它也够了。
帖子: 6
参与者: 1