大话cocos2d-js(2)

  说明一下,这一章大部分都是掠过,因为很多地方第一章有分析到了,估计看过第一章来看这里,也会晕头转向。为什么呢?因为第一章的时候陷入了一个“无限”深坑,直到第一章结束都没走出来。先来看一下深坑的入口点:

  分析到cc.game.run方法内的_run方法的时候。红色框框内的if语句内的 函数被执行了,那时候是这样想的,不知道它有什么用,所以就进入了无限深坑。云里雾里,直到分析完这一章的内容。

  为了避免下面的内容太过片面,我先说一下这个东西有什么作用,读取了一个json文件,json文件内放着很多cocos2d-js模块文件的路径,把这个json文件加载到后,处理json字符串成数组,然后创建<scrpit>,添加到body元素内。全部添加完毕后执行传参的函数,把self._prepared属性设置为true。

  细心的看下一个if语句,会发现一个循环计时器,计时器内的if语句就是判断self._preared属性是否为true。没添加完,是不会执行if语句内的功能的。

  

  继续上一章,粗略的分析完走cc.Class,接下来分析cc.Class不为true的情况下:

  

  

  来看一下,else做了写什么:

    1.执行cc.path.join方法,返回,赋值给 变量 ccModulesPath

    2.执行cc.loader.loadJson方法

  直接来看一下cc.path.join方法和执行完毕后的返回值,不难看出,拼接了2个字符串,重点看ccModulesPath,是一个json文件url,执行cc.loader.loadJson,其实就是加载了这个文件。其他的,我们来分析一下。

  

  

  先来定位一下cc.loader.loadJson方法:

  

  

  这里是执行cc.loader.loadTest,继续传入json文件url,来定位一下:

  这里就一个 if else语句,看判断条件,cc对象下的_isNodeJs属性,看名字不难看出,在初始化的时候,会判断环境是不是nodejs,取反的话,不是nodejs环境即执行if语句,xhr对象,自己封装过ajax的同学都知道,ajax就是用这个东西实现的,xhr对象用get方法来请求 moduleConfig.json文件。接下来又是if else语句,这里是判断ie浏览器 与 非ie浏览器,ie浏览器的xhr对象,设置了请求头:Accept-Charset,将一切设置好了以后,发送请求,这里我用的谷歌浏览器。

  来看一下onload出发后,xhr.status 状态等于200后,返回的是不是,moduleConfig.json文件的内容。

  执行 cb(null,xhr.responseTest),把结果传入

  把json字符串转换成 对象,然后执行cb方法(result作为参数传递),这里在来打印一下cb方法

  发现什么,饶了一圈,还是回到执行loader.loadJson方法的 传参。

  步骤有点多:

  红色框框的都是在处理get到JSON数据,重点是最后把处理完的数据 newJsList 当作参数,传递给执行方法cc.loder.loadJsWithimg。

  来打印一下处理完的数据长什么样,最后变成一个是数组。

  来定位一下cc.loader.loadJsWithImg方法

  

  红色的部分还是在处理数据,主要来看 cc.loader.loadJs这个方法和传入的数据:

  除了,赋值以外,来看一下,if else 语句, 这里的if语句是判断 ie浏览器,这边我用的是谷歌,所以走的是 else。执行了cc.async.map方法。定位一下

  主要看 new cc.AsyncPool, 然后执行 flow方法,第一章在分析 cc.Class的时候已经分析过这对象和方法了,这次我们抓重点来看一下,它到底干了些什么,执行 self._iterator 方法:

来打印一下,直接console.log(self._iterator):

  执行self._createScript

  同样的上次也分析过这个了,结合 jsPath,然后在看看 Dom,你会发现

  把数组里面存储的链接遍历创建成script标签添加到 body的最下面。

  很枯燥的一段,其实这一段就是这样的。我们在回到 cc.game.run

  说道这里还记得为什么我们会钻入这个“无限循环”?反正我觉得很绕!

  还不是为了揭秘红色框框的方法和赋值到底有什么用处?在看一下下一个if语句的,setInterval无限计时器,每10毫秒执行一次, self._prepared是不是对应上面红色框框的赋值,红色框框的用处是什么,加载存储在 json文件内的链接,也就是js文件。在json文件那些js文件没全部添加body内,是不会执行这个计时器内的if语句。

  我们可以试一下,看它添加完毕执行了多少次计时器。简单添加个console.log(1)就OK了。

  好,接下来终于看到main.js里我们定义的 onStart,休息一下。

时间: 2024-11-04 19:19:56

大话cocos2d-js(2)的相关文章

cocos2d js ClippingNode 制作标题闪亮特效

1.效果图: 之前在<Android 高仿 IOS7 IPhone 解锁 Slide To Unlock>中制作了文字上闪亮移动的效果,这次我们来看下怎样在cocos2d js 中做出类似的效果. 顺便给我公司的游戏打下广告.https://itunes.apple.com/cn/app/kuang-zhan-san-guo/id691116157? mt=8 2.效果原理 很easy.就是一张白色两边羽化的图片在标题上从左往右移动.可是普通的移动会穿帮.我们须要以标题作为模板来截取白色的图片

大话immutable.js

为啥要用immutable.js呢.毫不夸张的说.有了immutable.js(当然也有其他实现库)..才能将react的性能发挥到极致!要是各位看官用过一段时间的react,而没有用immutable那么本文非常适合你. 1,对于react的来说,如果父组建有多个子组建 想象一下这种场景,一个父组建下面一大堆子组建.然后呢,这个父组建re-render.是不是下面的子组建都得跟着re-render.可是很多子组建里面是冤枉的啊!!很多子组建的props 和 state 然而并没有改变啊!!虽然

cocos2d JS 函数类型相互转换(字符串、整形、浮点形、布尔值)

工作忙好些天了,近段时间抽点空分享一下自己学习JS的一点笔记心得做点记录,大神勿喷,谢谢! p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } span.s1 { font: 18.0px Helvetica } 1.字符串的转化 1 var found = false; 2 console.log(found.toString()); //输出 false 3 4 var num1 = 10; 5

cocos2d JS 本地缓存存储登陆记住账号密码-&gt;相当于C++中的UserDefault

在cocos-js 3.0以上的版本中,当我们用到本地存储的时候,发现以前用到的UserDefault在JS中并没有导出,而是换成了LocalStorage. 在LocalStorage.h文件中我们查看了一下源码,使用方法就是设置Key-Value的方式 存储数据:cc.sys.localStorage.setItem("key","value") 获取数据:cc.sys.localStorage.getItem("key") 移除数据:cc.

cocos2d.js

1.节点是Cocos2d最基础的东西 2.坐标与普通数学坐标一致 3.children属性表示节点的孩子,父节点位置变化,它包含的子节点也会跟着变化,以整体的形势移动 4.层(layer), 新建层:var layer = new cc.Layer(); 把层添加到舞台上:scene.addChild(layer); 再把子节点添加到这个层上:layer.addChild(child); 5.实现纯色背景:LayerColor 6.实现渐变的层:LayerGradient 7.Sprite加载背

html5 cocos2d js Access-Control-Allow-Origin

1.No 'Access-Control-Allow-Origin' header is present on the requested 近期在接html5的渠道,遇到了跨域的问题,使用 js 的 ajax post 或者get 方法,仅仅要目标URL略微有点不同,就会有跨域问题,浏览器会由于安全问题自己主动拦截. 这个问题事实上不是client能解决的,最好是目标URL的server代码是你能够控制的.最方便的解决方式是在你訪问的server端页面加代码.比方你如今的地址是 http://a

cocos2d JS 艺术字特殊符号的显示

this.setSocreAtion(score, this.tfMoneyList[index],mun); //传入分数与对象,调用下面的函数 setSocreAtion : function (num,artNumWidget) { num = parseInt(num);//转化为 int var number = num; if(num==0)return; //判断为0直接return,不执行下面的代码 if (num<0){ num = "/"+ num; }els

cocos2d js ScrollView的使用方法

游戏中非常多须要用到ScrollView的情况,也就是须要滚动一片区域. 这里有两种实现方法,一种是使用cocos studio的方式,另外一种是手写代码.先看第一种 第一种记得在设置滚动区域时选取裁剪项. var size = cc.winSize; //读取json文件 var root = ccs.uiReader.widgetFromJsonFile(res.listJson); this.addChild(root); //获取在cocos studio里面设定好的scrollView

cocos2d JS 基础语法运算符

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } 简单且逼格高的运算符 var a = 12; console.log(-a); //输出 -12 - -> 取反 var b = a++; console.log(b); //输出 12 - -> 先赋值b,a再++ b = ++a; console.log(b); //输出 14 - -> ++a赋值b,a先++后赋值 var a

cocos2d JS 基础语法间的函数方法相互调用

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } 1.函数嵌套函数 1 function calcuate(opr, a, b) { // 定义函数,opr - -> 符号,a,b - -> 数值 2 3 //定义 + 函数 4 function add(a, b){ 5 return a + b; 6 } 7 8 //定义 - 函数 9 function sub(a, b){ 10 r