Cocos入门知识总结 (二)

二建继续努力。cocos也不能放弃。

1.6 常用节点和组件接口

1.6.1 激活/关闭节点

节点默认是激活的,我们可以在代码中设置它的激活状态,方法是设置节点的 active 属性:

this.node.active = false;

设置 active 属性和在编辑器中切换节点的激活、关闭状态,效果是一样的。当一个节点是关闭状态时,它的所有组件都将被禁用。同时,它所有子节点,以及子节点上的组件也会跟着被禁用。要注意的是,子节点被禁用时,并不会改变它们的 active 属性,因此当父节点重新激活的时候它们就会回到原来的状态。也就是说,active 表示的其实是该节点 自身的 激活状态,而这个节点 当前 是否可被激活则取决于它的父节点。并且如果它不在当前场景中,它也无法被激活。我们可以通过节点上的只读属性 activeInHierarchy来判断它当前是否已经激活。

this.node.active = true;

 若节点原先就处于 可被激活 状态,修改 active 为 true 就会立即触发激活操作:

  • 在场景中重新激活该节点和节点下所有 active 为 true 的子节点
  • 该节点和所有子节点上的所有组件都会被启用,他们中的 update 方法之后每帧会执行
  • 这些组件上如果有 onEnable 方法,这些方法将被执行
this.node.active = false;

如该节点原先就已经被激活,修改 active 为 false 就会立即触发关闭操作:

  • 在场景中隐藏该节点和节点下的所有子节点
  • 该节点和所有子节点上的所有组件都将被禁用,也就是不会再执行这些组件中的 update 中的代码
  • 这些组件上如果有 onDisable 方法,这些方法将被执行。

1.6.2 更改节点的父节点

假设父节点为 parentNode,子节点为 this.node

可以:

this.node.parent = parentNode;

 或者

this.node.removeFromParent(false);

parentNode.addChild(this.node);

注意:

  • removeFromParent 通常需要传入一个 false,否则默认会清空节点上绑定的事件和 action 等。
  • 通过创建和销毁节点创建出新节点后,要为节点设置一个父节点才能正确完成节点的初始化。

1.6.3 索引节点的子节点

this.node.children 将返回节点的所有子节点数组。 this.node.childrenCount 将返回节点的子节点数量。

注意 :以上两个 API 都只会返回节点的直接子节点,不会返回子节点的子节点。

1.6.4 更改节点的变换(位置、旋转、缩放、尺寸)

(1)更改节点位置

分别对 x 轴和 y 轴坐标赋值:

this.node.x = 100;
this.node.y = 50;

使用 setPosition 方法:

this.node.setPosition(100, 50);
this.node.setPosition(cc.v2(100, 50));

(2)更改节点旋转

this.node.rotation = 90;
//或者用
this.node.setRotation(90);

(3)更改节点缩放

this.node.scaleX = 2;
this.node.scaleY = 2;
//或者用方法
this.node.setScale(2);//setScale 传入单个参数时,会同时修改 scaleX 和 scaleY。
this.node.setScale(2, 2);

(4)更改节点尺寸

this.node.setContentSize(100, 100);
this.node.setContentSize(cc.size(100, 100));
//或者使用
this.node.width = 100;
this.node.height = 100;

(5)更改节点锚点位置

this.node.anchorX = 1;
this.node.anchorY = 0;
//等价于
this.node.setAnchorPoint(1, 0);

注意:以上这些修改变换的方法会影响到节点上挂载的渲染组件,比如 Sprite 图片的尺寸、旋转等等。

(6)颜色和不透明度

在使用 Sprite, Label 这些基本的渲染组件时,要注意修改颜色和不透明度的操作只能在节点的实例上进行,因为这些渲染组件本身并没有设置颜色和不透明度的接口。

假如我们有一个 Sprite 的实例为 mySprite

//设置颜色
this.node.color = cc.Color.RED;
//设置不透明度
this.node.opacity = 128;//数值越小越不透明。

1.6.5 常用组件接口

cc.Component 是所有组件的基类,任何组件都包括如下的常见接口(假设我们在该组件的脚本中,以 this 指代本组件):

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

1.7 创建和销毁节点

1.7.1 创建新节点

除了通过场景编辑器创建节点外,我们也可以在脚本中动态创建节点。通过 new cc.Node() 并将它加入到场景中,可以实现整个创建过程。

以下是一个简单的例子:

cc.Class({
  extends: cc.Component,
  properties: {

  },

  start: function () {
      let self = this;
      // 加载资源 此资源必须在assets/resources目录下才可以加载到
      cc.loader.loadRes("sheep",cc.SpriteFrame,function (err,spriteFrame) {
          let node = new cc.Node("sprite");
          let sp = node.addComponent(cc.Sprite);
          sp.spriteFrame = spriteFrame;
          node.parent = self.node;
          node.setContentSize(100,100);
      });
  },
});

1.7.2 克隆已有节点

有时我们希望动态的克隆场景中的已有节点,我们可以通过 cc.instantiate 方法完成。使用方法如下:

cc.Class({
  extends: cc.Component,
  properties: {
    target: {
      default: null,
      type: cc.Node,
    },
  },

  start: function () {
    //克隆挂载的节点
    var node = cc.instantiate(this.target);
    node.parent = this.node;
    node.setPosition(0, 0);
  },
});

1.7.3 创建预制节点

和克隆已有节点相似,你可以设置一个预制(Prefab)并通过 cc.instantiate 生成节点。使用方法如下:

cc.Class({
  extends: cc.Component,
  properties: {
    target: {
      default: null,
      type: cc.Prefab,
    },
  },

  start: function () {
    var node = cc.instantiate(this.target);
    node.parent = this.node;
    node.setPosition(0, 0);
  },
});

1.7.4 销毁节点

通过 node.destroy() 函数,可以销毁节点。值得一提的是,销毁节点并不会立刻被移除,而是在当前帧逻辑更新结束后,统一执行。当一个节点销毁后,该节点就处于无效状态,可以通过 cc.isValid 判断当前节点是否已经被销毁。

使用方法如下:

cc.Class({
  extends: cc.Component,

  properties: {
    target: cc.Node,
  },

  start: function () {
    //计时器5秒后销毁目标节点
    setTimeout(function () {
      this.node.destroy();
    }.bind(this), 5000);
  },


  update: function (dt) {
    if (cc.isValid(this)) {
      this.target.rotation +=  10.0;
    }
  },
});

destroy 和 removeFromParent 的区别

调用一个节点的 removeFromParent 后,它不一定就能完全从内存中释放,因为有可能由于一些逻辑上的问题,导致程序中仍然引用到了这个对象。因此如果一个节点不再使用了,请直接调用它的 destroy 而不是 removeFromParentdestroy 不但会激活组件上的 onDestroy,还会降低内存泄露的几率,同时减轻内存泄露时的后果。

总之,如果一个节点不再使用,destroy 就对了,不需要 removeFromParent 也不需要设置 parentnull。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是Cocos Creator快速入门的步骤: 1. 安装Cocos Creator 首先,你需要下载并安装Cocos Creator。你可以在Cocos官方网站上下载到最新版本的Cocos Creator。安装成功后,你就可以开始使用Cocos Creator进行游戏开发了。 2. 创建新项目 打开Cocos Creator后,你可以点击“新建项目”来创建一个新的项目。在创建项目的过程中,你需要选择项目名称、项目路径、项目类型等信息。 3. 创建场景 在Cocos Creator中,场景是游戏的基本组成部分。你可以通过点击“场景”按钮来创建一个新的场景。在场景中,你可以添加游戏对象、精灵、动画等元素。 4. 添加游戏对象 游戏对象是游戏中的基本元素,你可以通过在场景中添加游戏对象来创建游戏。在Cocos Creator中,你可以通过点击“节点”按钮来添加游戏对象。在添加游戏对象之后,你可以设置游戏对象的属性和行为。 5. 添加组件 组件是Cocos Creator中的重要概念,它可以给游戏对象添加功能。你可以通过在场景中添加组件来给游戏对象添加行为和属性。在Cocos Creator中,你可以通过点击“组件”按钮来添加组件。 6. 编写脚本 Cocos Creator中的脚本是用来实现游戏逻辑的。你可以通过编写脚本来给游戏对象添加更复杂的行为。在Cocos Creator中,你可以使用JavaScript或TypeScript来编写脚本。 7. 运行游戏 在完成上述步骤之后,你可以点击“运行”按钮来运行游戏。在游戏运行过程中,你可以测试游戏的功能和性能。 以上就是Cocos Creator快速入门的步骤。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留白的云

感谢鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值