Record someting that I'v learn
我们都知道,对于Javascript的运行时this
来说,函数进回调之前一定要保存this
,通常的做法如下:1
var _that = this; //用一个局部变量保存this的值再进放回调callback
本来通常情况下处理函数都要用一层匿名函数包裹一下,才能维持处理函数本身的this.也可以直接通过.bind(logger)人为的将其执行时的this指向logger对象。
而且有个比较好用说起来又复杂的情况是与函数的闭包一起使用,例子是我用cocosjs写的一段代码,如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25//闭包嵌套
ccs.armatureDataManager.addArmatureFileInfo(FynnFlashPath + "songli.ExportJson");
var temp = new Array();
this._armature = new ccs.Armature("songli");
this._armature.getAnimation().play("songli",-1,0);
this._armature.x = cc.winSize.width / 2;
this._armature.y = cc.winSize.height / 2;
temp.push(this._armature);
this._armature.getAnimation().setMovementEventCallFunc(function(armature, movementType, movementID) {
if (movementType == ccs.MovementEventType.complete) {
var toBig = cc.scaleTo(0.2,1.2);
var toSmall = cc.scaleTo(0.2, 0);
var toFade = cc.fadeOut(0.2);
var spawn = cc.spawn(toSmall,toFade);
var seqScale = cc.sequence(toBig,spawn,cc.callFunc(function(selectorTarget){
if(temp!=null){
temp[0].removeFromParent(true);
cc.log("动画Release!")
}
}, temp));
temp[0].runAction(seqScale);
}
}.bind(this));
this.addChild(this._armature,200);
但是,有bug总有解决的方法,我的办法就是取到当前对象的大小,你锚点不正对吧,我自已来!方法如下:
1 | ctor: function(){ |
python
命令,如成功即出现版本号。现在的模块化开发在前端来说非常热门,cocos2d-js对于开发HTML5游戏的前端来说,cocos2d-js由于是采用JavaScript脚本,而JS的语法层次缺乏模块化编程支持,在使用cocos2d-js引擎开发中大型游戏项目需要的是一种更有效,更简单的方法进行模块化编程,而不仅仅是让project.json中的jsList中配置的js文件一个一个按顺序执行。如能学习同门语言的node.js的molule机制,构造一个模块开发环境,可在一定程度上解决上面的问题,提高开发效率。
解决方案分为两步:
这样做有什么好处?利用node.js的工作流,能大大加速cocos2d-js的开发调试速度。cocos2d-js在HTML5游戏方面工具链相比Erget是有先天性不足,我们暂不讨论,先来看看以上这两步具体是怎么做的:
cocos2d-js 是跨平台引擎,程序要在不同的平台下运行,有时就要动态地判断平台,我暂时总结出两种方法:
cc.sys.isNative
布尔变量判断是否本地平台1 | if(cc.sys.isNative){ |