阅读笔记1

内容创作工作流程
1:节点和组件
学习到了节点(Node)是承载组件的实体,我们通过将具有各种功能的组件(Component)挂载到节点上,来让节点具有各式各样的表现和功能。在层级管理器里创建最简单的Sprite节点,可以在节点的属性检查器中显示 Node 属性 和Sprite组件属性,Sprite组件的主要属性是 Sprite Frame ,Sprite Frame 可以添加在游戏中渲染的图像文件。通过修改节点属性,能够对这个图像进行缩放和颜色等不同方式的显示。


2:坐标系和变化
知道了锚点位置确定后,所有子节点就会以锚点所在位置作为坐标系原点,所有的子节点的变换属性是以父节点锚点为基准来变换的。


3:管理节点层级和现实顺序
学习了通过节点层级来将节点按照逻辑功能归类,并按需要排列他们的显示顺序,有父节点控制子节点的各种属性变化,尽量避免出现大量无意义的节点。


4:场景编辑器搭建场景图像
知道了Canvas节点是默认渲染根节点。将只负责挂载脚本,执行逻辑,不包含任何渲染相关内容的节点放置跟层级,和Canvas节点比例。就像新做的RGB游戏里的Script和UiScript节点一样,只负责挂载脚本和执行逻辑。基本节点类型有空节点,渲染节点和UI节点。UI 节点大部分都是由渲染节点组合而成的。


===================================================================
脚本开发工作流程
1:创建和使用组件脚本
知道了在资源管理器里创建脚本,然后将编写好的脚本添加到场景节点中。在节点的属性检查器里点击添加组件来添加脚本。


2:使用cc.Class声明类型
前面的看的不是很明白,只学习到了通过在组件脚本中声明属性,我们可以将脚本组件中的字段可视化地展示在 属性检查器 中,从而方便地在场景中调整属性值。
常用参数:
default: 设置属性的默认值,这个默认值仅在组件第一次添加到节点上时才会用到 
type: 限定属性的数据类型。 
visible: 设为 false 则不在 属性检查器 面板中显示该属性 ,也可以在创建变量是前面用下划线,效果也是一样的。
serializable: 设为 false 则不序列化(保存)该属性 
displayName: 在 属性检查器 面板中显示成指定名字 
tooltip: 在 属性检查器 面板中添加属性的 Tooltip 


3:访问节点和组件
只要在组件方法里访问this.node变量,就可以获得组件所在的节点。
(1)使用getComponent API可以获得这个节点上所需的组件。
例如:var label = this.getComponent(cc.Label);
this.getComponent()括号里输入所要查找的组件名
也可以为 getComponent 传入一个类名,效果一样。对用户定义的组件而言,类名就是脚本的文件名。
如果找不到组件,getComponent将返回null
(2)使用getChildren可以获得一个包含所有子节点的数组。getChildByName也一样,这个比较常用。
(3)cc.find将根据传入的路径进行逐级查找
例如:this.backNode = cc.find("Canvas/Menu/Back");
(4)定义全局变量用window.来定义
例如:window.Global = {
    backNode: null,
    backLabel: null,
};
然后再合适的地方初始化
Global.backNode = this.node;
初始化后,你就能在任何地方访问到 Global 里的值。
注意事项:
访问全局变量时,如果变量未定义将会抛出异常。
添加全局变量时,小心不要和系统已有的全局变量重名。
你需要小心确保全局变量使用之前都已初始化和赋值。
(5)require 的用法不是很能理解。


4:常用节点和组件接口
节点的关闭
this.node.active = false;
节点的激活
this.node.active = true; 
更改节点位置
分别对 x 轴和 y 轴坐标赋值:
this.node.x = 100; this.node.y = 50;
设置 position 变量:
this.node.position = cc.p(0, 0);
使用 setPosition 方法:
node.setPosition(cc.p(0, 0)); node.setPosition(0, 0);
更改节点旋转
this.node.rotation = 90;或
this.node.setRotation(90);
更改节点缩放
this.node.scaleX = 2; this.node.scaleY = 2;或
this.node.setScale(2); this.node.setScale(2, 2);
setScale 传入单个参数时,会同时修改 scaleX 和 scaleY。
更改节点尺寸
this.node.setContentSize(100, 100); this.node.setContentSize(cc.p(100, 100));或
this.node.width = 100; this.node.height = 100;
更改节点锚点位置
this.node.anchorX = 1; this.node.anchorY = 0;或
this.node.setAnchorPoint(1, 0);
设置它的颜色:
mySprite.node.color = cc.Color.RED;
设置不透明度:
mySprite.node.opacity = 128;


常用组件接口
this.node:该组件所属的节点实例 
this.enabled:是否每帧执行该组件的 update 方法,同时也用来控制渲染组件是否显示 
update(dt):作为组件的成员方法,在组件的 enabled 属性为 true 时,其中的代码会每帧执行 
onLoad():组件所在节点进行初始化时(创建之后通过设置父节点添加到节点树)执行 
start():会在该组件第一次 update 之前执行,通常用于需要在 onLoad 初始化完毕后执行的逻辑。


5:生命周期回调
onLoad 回调会在这个组件所在的场景被载入的时候触发
start 回调函数会在组件第一次激活前,也就是第一次执行 update 之前触发。
update 回调里存放游戏开发的每一帧渲染前更新物体的行为,状态和方位的更新操作。


6:创建和销毁节点
脚本中动态创建节点。通过 new cc.Node() 并将它加入到场景中,可以实现整个创建过程。
例如:var node = new cc.Node('sprite ' + this.count);
      var sp = node.addComponent(cc.Sprite);
克隆节点,使用cc.instantiate 
例如:var scene = cc.director.getScene();
      var node = cc.instantiate(this.target);


创建预置节点和克隆节点类似
通过 node.destroy() 函数,可以销毁节点。销毁节点并不会立刻发生,而是在当前帧逻辑更新结束后,统一执行。没看懂。


7:玩家输入事件
通过函数 cc.eventManager.addListener(listener, target) 来进行定义
1. cc.EventListener.MOUSE (鼠标)  
   鼠标按下:onMouseDown(event); 
   鼠标释放:onMouseUp(evnet); 
   鼠标移动:onMouseMove(evnet); 
   鼠标滚轮:onMouseScroll(evnet
2. cc.EventListener.KEYBOARD (键盘)
   键盘按下:onKeyPressed(keyCode, event); 
   键盘释放:onKeyReleased(keyCode, evnet); 
3. cc.EventListener.TOUCH_ONE_BY_ONE (单点触摸)
   触摸开始:onTouchBegan(touches, event); 
   触摸移动时:onTouchMoved(touches, event); 
   触摸结束时:onTouchEnded(touches, event); 
   取消触摸:onTouchCancelled(touches, event); 
   onTouchBegan 回调事件里要 return true,这样后续的 onTouchEnded      和 onTouchMoved 才会触发事件。
4. cc.EventListener.TOUCH_ALL_AT_ONCE (多点触摸)
这次RGB游戏主要是用了鼠标移动:onMouseMove(evnet); 


8:监听和发射事件
通过this.node访问节点监听事件,用this.node.on()生成,然后再节点cc.node中完成。使用once方法和on的效果一样。once监听在监听函数响应后就会关闭监听事件。
添加bind绑定函数
例如:this.node.on('mousedown', function ( event ) {
  this.enabled = false;
}.bind(this));
使用  off  方法关闭对应的监听事件
例如:this.node.off('foobar', this._sayHello, this);
通过 emit和dispatchEvent发射事件
冒泡派送会将事件从事件发起节点,不断地向上传递给他的父级节点,直到到达根节点或者在某个节点的响应函数中做了中断处理 event.stopPropagation() 。
不能直接创建cc.Event对象,需要创建cc.Event.EventCustom对象来进行派发。


9:系统内置事件
枚举类型:是值的有限集合,如果值定义为这个类型则该值是可以列出(或称可枚举)的。
可以使用枚举类型也可以直接使用事件名来生成事件的监听器。
鼠标事件在桌面平台才会触发,触摸事件只需要监听触摸事件即可同时响应移动平台的触摸事件和桌面端的鼠标事件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值