微信小游戏学习笔记4(脚本3)

一、常用节点和组件接口

节点状态和层级操作
我们通过this.Node访问当前脚本所在节点

激活或关闭节点
我们可以通过修改节点的active属性来对它进行关闭或激活的操作,默认情况下,节点处于激活状态。

this.Node.active = faulse ;  //节点关闭

当一个节点处于关闭状态下时,此节点上挂载的所有组件都被禁用,同时它所有子节点上挂载的组件也被禁用,但子节点的active属性并未更改,父节点一旦被激活子节点上的组件也被激活。

若节点处于可被激活的状态时,我们可以通过修改节点的active属性为true来直接激活该节点,之后激活的操作有:
1.激活该节点下所有active属性为true的子节点
2.该节点及其子节点上挂载的所有组件被激活,他们中的update方法每帧都被执行
3.这些组件上onEnable方法也被执行

若节点已被激活,通过修改active属性为false会触发操作:
1.在场景中隐藏该节点和节点下的所有子节点
2.该节点和所有子节点上的所有组件都将被禁用,也就是不会再执行这些组件中的 update 中的代码
3.这些组件上如果有 onDisable 方法,这些方法将被执行

更改父节点
令父节点为parentNode,子节点为this.node

this.node.parent = parentNode;

this.node.removeFromParent(false);//如果不传入参数(false),则该节点上的绑定事件及action 会被默认清空
parentNode.addChild(this.node);

搜索节点的子节点
返回子节点数目this.node.childrenCount
返回所有子节点的数组this.node.children
注意:这两个API只返回该节点的子节点,而不反回子节点的子节点

更改节点位置

this.node.x = 100;
this.node.y =50;
//直接对节点的坐标赋值
this.node.setPosition(100,50)
this.node.setPosition(cc.v2(100,50));

this.node.position = cc.v2(100,50);

更改节点旋转度

this.node.setRotation (90);
//或
this.node.Rotation=90;

更改节点锚点

this.node.setAnchorPoint(1,0);

更改节点透明度和颜色

在使用Sprite和label等渲染组件时,更改颜色和透明度的操作只能在实例上进行,因为这些渲染组件并没有添加更改颜色和透明度的接口。比如我们有一个mySprite的sprite实例:

//更改颜色
mySprite.node.color = cc.Color.RED;

//更改透明度
mySprite.node.opacity = 50;

常见组件接口

cc.component 是所有组件的基底,任何组件都包含以下常见组件:
*this.node :该组件所属节点实例
*this.enabled :是否每帧执行组建的 update 方法,同时也控制渲染组件是否显示
*update :作为组件的成员方法,在组件的enabled属性为true时,每帧都执行的代码
*onLoad :在组件的节点进行初始化时执行
*start:会在该组件第一次 update 之前执行,通常用于需要在所有组件的 onLoad 初始化完毕后执行的逻辑

二、生命周期回调

用户只要定义特定的回调函数,Creator就会在特定时间自动执行相关脚本,用户不需要手动调试。

COCOS为用户提供了以下的回调函数:
onLoad
start
update
lateUpdate
onDestroy
onDisable
onEnable

onLoad
组件脚本初始化阶段,我们提供了onLoad函数,在每次节点首次被激活时执行,如初次场景载入。在 onLoad 阶段,保证了你可以获取到场景中的其他节点,以及节点关联的资源数据。onLoad函数总在任何start函数之前执行,可以利用这一点实现脚本执行顺序的安排。我们通常在onLoad函数部分执行一些初始化操作:

cc.Class({
	extrends : cc.component,

	properties : {
		bulletSprite : cc.spriteFrame,
		gun : cc.Node
	},

	onLoad : function () {
		 this._bulletRect = this.bulletSprite.getRect();
    	this.gun = cc.find('hand/weapon', this.node);
  }
});

start
start 函数会在第一次激活前,也就是第一次执行update之前执行。start用于初始化一些中间变量,这些中间变量会在之后的update函数中频繁变换,所以需要在第一次执行update之前进行初始化。

cc.Class ({
	extrends : cc.component,

	start : function () {
		this._time =0.0;
	},

	update : function (dt) { 
		this._time += dt;
		 if ( this._timer >= 10.0 ) {
      		console.log('I am done!');
      		this.enabled = false;
   		 }
   	}
})

update
游戏开发的一个关键点是在每一帧渲染前更新物体的行为,状态和方位。这些更新操作通常都放在 update 回调中。

cc.Class ({
	extrends : cc.component,

	update : function (dt) {
		this.node.setPosision(0.0,40*dt);
	}
});

lateUpdate
update 会在动画更新前执行,所以,如果我们想在动效更新之后执行某些操作,这时候就可以用到lateUpdate这个函数。

cc.Class({
  extends: cc.Component,

  lateUpdate: function (dt) {
    this.node.rotation = 20;
  }
});

onEable

当组件的 enabled 属性从 false 变为 true 时,
或者所在节点的 active 属性从 false 变为 true 时,
会激活 onEnable 回调。
倘若节点第一次被创建且 enabled 为 true,则会在 onLoad 之后,start 之前被调用。

onDisable
当组件的enabled属性从true变为false时
或所在节点的active属性从true变为false时
激活onDisable回调函数。

onDestroy
当组件或者所在节点调用了 destroy(),则会调用 onDestroy 回调,并在当帧结束时统一回收组件。

三、创建和销毁节点

创建新节点
除了在场景编辑内创造节点,我们也可以在脚本内直接创造节点。通过new cc.Node()将它添加到场景中。

cc.Class({
	extrends : cc.component,

	properties : {
		sprite : {
			default : null,
			type : cc.spriteFrame
		}
	},

	start : function (){
		var node  =new cc.Node('sprite');
		var sp = node.addComponent(cc.sprite);
		
		sp.spriteFrame = this.sprite;
		node.parent = this.node;
	} 
});

克隆已有节点
我们可以通过cc.instantiate动态的在场景中克隆已有节点,如:

cc.Class({
	extrends : cc.component,

	properties : {
		sprite : {
			default : null,
			type : cc.spriteFrame
		}
	},

		start : function () {
			var scene = cc.director.getSence();
			var node = cc.instantiate(this.target);

			node.parent = scene;
			node.setPosition(0,0);
		}
});

创建预制节点
与克隆节点的方法相同只是将预制的节点类型设置为cc.Prefab

propertities : {
	target : {
		default : null ,
		type : cc.Prefab
	}
};	

销毁节点
通过node.destroy()来销毁节点,销毁节点并不会立即移除,而是在当前帧逻辑结束后统一进行。

cc.Class({
	  extends: cc.Component,

 	 properties: {
   	 	target: cc.Node,
 	 },

	start : function () {
		setTimeOut (function () {
			this.target.destroy();
			}.bind(this), 5000);
	},
	
	update: function (dt) {
		// cc.isValid 判断是否已被销毁
    	if (cc.isValid(this.target)) {
      		this.target.rotation += dt * 10.0;
    	}
  },
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值