一、基本内容:
1.cc.Label相关:
(1)动态创建cc.Label : var node = new cc.Node('text'); node.addComonpnet(cc.Label);
(2) 设置文本内容:node.getComponent(cc.Label).string = 'test'; 设置大小:node.getComponent(cc.Label).fontSize = 30 文本对齐:参考creator中
(3) 如何动态获取文本的宽度: node.getComponent(cc.Label).string = 'test'; var getWidth = node.width;这样即可获得宽度;注意事项:要让node所在父节点active =true,即让js脚本调用onload函数之后,才能正确获取with;
(4) 文本长度超出creator中设定长度时不显示:node.getComponent(cc.Label).overFlow = cc.Label.Overflow.CLAMP 还有其它几种模式暂时没用到后续研究,这里说下含义,NONE(无样式)、CLAMP(截断)、SHRINK(自动缩小文字以适应大小)、RESIZE_HEIGHT(自增长高度)
2.cc.Sprite相关
(1)动态创建cc.Label : var node = new cc.Node('text'); node.addComonpnet(ccSprite);
(2)设置图片:node.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(texture);
a) 精灵帧获取的获取方法1:new cc.SpriteFrame(texture); 优点:动态加载,缺点:会有异步问题
那么texture如何获取?cc.loader.load({url: cc.mg.util.get_wxhead(userData.url), type: 'jpg'}, function (err, texture) {
var head = new cc.SpriteFrame(texture);
dialog.getChildByName('face').getChildByName('mask').getChildByName('tx').getComponent(cc.Sprite).spriteFrame = head;
});
b) 精灵帧获取的获取方法2:界面绑定的脚本,即.js文件properties: 中定义 frame : cc.SpriteFrame,然后在creator中将图片拉倒这个frame上。优点:初始化加载,方便使用。缺点:会有内存大,加载速度慢
3.cc.Animation相关
(1)动画播放和停止:node.getComponent(cc.Animation).play;node.getComponent(cc.Animation).stop();
(2)注册动画播放完成事件:node.getComponent(cc.Animation).on('finished', function(){cc.log('finish')};
(3)备注:creator中默认有个playOnLoad属性需要注意:含义是在第一次active设为可见的时候会自动播放动画,如果不需要可以不勾选。
4.ToggleGroup相关
定义:组合框(多项中只能选择一项)
(1)怎么获取toggle(其中的一项):this.togglegroup.toggleItems[0];这代码访问第一项。
(2)怎么获取toogle是否选中:this.togglegroup.toggleItems[0].check();调用check()方法
(3)备注:在onload获取调用this.togglegroup.toggleItems.length获取的长度为0,所以只能在start()函数中调用,creator设定的
5.cc.Button相关
(1)设置按钮灰态:node.getComponent(cc.Button).interactable = true;与creator中的EnableAuto中配合;表现上是会灰色了,但是按钮还是可以点击,还得通过事件回调来处理,按下return;
(2)事件注册:btn.on('touchend' || 'mouseup', function(e) {var btn = e.currentTarget; };在回调内部获取按钮自己
(3)修改按钮的图片:即修改cc.Sprite组件,参考上面cc.Sprite相关
- Layout相关
(1)这个布局控件在孩子设置为隐藏的时候,会自动调整孩子的位置,可以设置为左对齐,居中对齐等等;但是现在有个bug:在孩子的类型不同时,自动调整孩子的位置时不对,需要用代码控制孩子的位置,如果孩子多的话,最好还是不要用Layout布局。
7.RichText相关
(1)用法node.getComponent(cc.RichText).string = '
(2)换行增加字符串‘
’;
8.定时器相关
(1)创建:
a) this.schedule(this.updatePlayerTime,1); 参数1:callback 参数2:间隔;备注:这个this一定要挂接在组件上的脚本
b) cc.director.getScheduler().scheduleCallbackForTarget(this,function(){},1,0);
(2)销毁:
a) this.unschedule(this.updatePlayerTime); 销毁所有:this.unscheduleAllCallbacks();
b) cc.director.getScheduler().unscheduleCallbackForTarget(this, this.timer);销毁所有:cc.director.getScheduler().unscheduleAllForTarget(this);
(3)只执行一次:this.scheduleOnce()
9.操作事件相关(点击弹起移动事件)
(1)弹起事件:node.on('touchend' || 'mouseup', function(e) {})
(2)按下事件、长按事件:node.on('touchstart',function(e){})
(3)移动事件:node.on('touchmove',function(e){})
(4)取消事件:node.on('touchcancel',function(e){}) 离开精灵的时候会触发这个事件
10.cc.EditBox相关
暂时未用到
二、进阶内容:
1.全局系统事件:
a)发送:var data= {};cc.systemEvent.emit('eventName', data);没有data:cc.systemEvent.emit('eventName');
b)注册事件:cc.systemEvent.on('eventName', this.eventCallBack, this);
c)取消事件注册:cc.systemEvent.off('eventName', this.eventCallBack, this);
d)事件回调函数:eventCallBack:function(e) { var data= e.detail;};
2.节点动态创建销毁:
a)var node = new cc.Node("name");
b) node.destroy();
3.根据现有的节点创建节点:
var newNode = cc.instantiate(oldNode);
4.实例化预制:
cc.loader.loadRes('prefab/resName', cc.Prefab, function(err, prefab){
var newNode = cc.instantiate(prefab);
});
5.资源的加载:
cc.loader.load();
cc.loader.loadRes();
cc.loader.loadResArray();
cc.loader.loadResDir();
cc.loader.loadResDir加载资源有没有同名覆盖的问题;比如A目录下a.png;B目录下也有a.png代码中会显示哪个png,如果用自动图集肯定没这问题
6.资源的释放:
cc.loader.releaseRes(resPath);目前用在界面动态创建,在关闭界面的时候用这个函数释放当前界面资源prefab;
看下cc.loader类中的释放函数,目前项目中并没有用到复杂的内存释放。
7.点A移动到点B,B有父节点,坐标如何转换?
var pos4 = this.pointB.convertToWorldSpaceAR(cc.p(0,0));
var pos5 = this.pointA.parent.convertToNodeSpaceAR(pos4);
var moveTo = cc.moveTo(0.5, pos5);
8.场景切换:
cc.director.loadScene(scene_name, callback); //scene_name为creator中.fire的文件名