正文  游戏开发 > 游戏引擎 >

Cocos2d-x里Javascript开发的一些要点

1.CocosBuilder和Javascript里的MVC模式var scene = cc.BuilderReader.loadAsScene("CheckUpdateLayer");v...

1.CocosBuilder和Javascript里的MVC模式
var scene = cc.BuilderReader.loadAsScene("CheckUpdateLayer");
var layer = cc.BuilderReader.load("CheckUpdateLayer");
这两行代码分别加载成scene和layer.
 
一般来说,我们会创建一个CheckUpdateLayer.js,要注意上图里的”JS Controller”里填入的”CheckUpdaeLayer”,其实并不是一个Layer,而是一个名副其实的Controller,因为CocosBuilder奉行的就是MVC模式.
举个例子,如果在CheckUpdateLayer.js里增加了一个方法,如下:
CheckUpdateLayer.prototype.foo = function() {
    cc.log("this is afunction");
}
这个foo方法其实是属于Controller的方法,并不是属于Layer或Scene的方法.
2.什么时候才是CCB加载完成?
CheckUpdateLayer.prototype.onDidLoadFromCCB = function() {
    cc.log("CheckUpdateLayerinit");
    
    var l =cc.LayerColor.create(cc.c3b(33,233,0), 200, 200);
    this.rootNode.addChild(l);
}
 
打开jsb_cocosbuilder.js,找到cc.BuilderReader.load方法,你要看到你心中的疑问的答案.
 
3.generated/cocos2dxapi.js全错了.
里面的类都是带CC前缀的,例如cc.CCNode,cc.CCLayer,cc.CCSprite,但其实真实在JS里使用的时候是没有前缀的,例如cc.Node,cc.Layer,cc.Sprite,etc…
 
4.cocos2d-x常用的几种单位在C++和JS里的对应(jsb_coco2d.js)
C++
Javascript
CCLOG
cc.log
ccc3
cc.c3b
ccc4
cc.c4b
ccc4f
cc.c4f
ccp
cc.p
CCSize(w,h)
cc.size
CCRect(x,y,w,h)
cc.rect
 
 
5.类型
Javascript是弱类型语言,在这里没有CCArray,CCDictionary,因为任意一个Javascript的对象都具有数组和字典的基本特性.
 
6.动态
在编写C++的时候,很羡慕Objective-c动态特性,例如NSLog(@“%@”, obj)这样可以输出对象的描述信息.但在Javascript里一切都是浮云, cc.dump可以满足你的需求.
 
7.多看cocos2d-2.1beta3-x-2.1.1/samples/Javascript里的几个demo,会解决你90%的疑问.