CocosCreator新手教程——cc.Node基础常用接口(API)

2023-05-16

CocosCreator开发笔记——cc.Node基础常用接口(API)

一、常用属性

cc.Class({
  extends: cc.Component,
 
  properties: {
    sprite: {
      default: null,
      type: cc.SpriteFrame,
    },
  },
 
  start: function () {
    var node = new cc.Node('newNode');//新建newNode节点
    var sp = node.addComponent(cc.Sprite);//为节点添加精灵组件
    sp.spriteFrame = this.sprite;//更改精灵组件的精灵帧
    
    node.parent = this.node;//将节点的父节点(属性)设为当前节点
    
    node.setPosition(0,0);//设置节点位置(相对于父节点锚点)
    node.x =100;//设置节点的X轴位置(相对于父节点锚点)
	node.y =100;//设置节点的Y轴位置(相对于父节点锚点)
	
	node.rotation = 90;//逆时针旋转90度(相对原图片)
	node.rotation = -90;//顺时针旋转90度(相对原图片)
	node.rotation = 0;//将角度还原
	
	node.scale = 2;//将节点放大倍数改为2
	node.scaleX = 0.5;//X轴缩放倍数
	node.scaleY = 0.5;//Y轴缩放倍数

	node.opacity = 255;//节点透明度(0~255)
	
	node.color = new cc.Color(255, 255, 255);//节点颜色默认为白色,数值为:(255,255,255)
	
	node.anchorX = 0;//设置节点锚点(0~1)左下为(0,0)右上为(1,1)
	node.anchorY = 0;
	
	node.width = 100;//节点宽度
	node.height = 100;//节点长度
	
	node.name = "New Node";//用于获取或更改节点名字

	var children = node.children;//获取节点的所有子节点
	for (var i = 0; i < children.length; ++i) {
   		 cc.log("Node: " + children[i]);
	}
	var count = node.childrenCount;//获取节点子节点数量
	
	node.active = false;//设置节点的激活状态(值得注意的是,一个节点的父节点如果不被激活,那么即使它自身设为激活,它仍然无法激活。)
	var isActive = node.activeInHierarchy;//用于检查节点的激活状态
	
	var isValid = node.isValid;//该对象是否可用(被 destroy 后将不可用)
	//当一个对象的 destroy 调用以后,会在这一帧结束后才真正销毁。因此从下一帧开始 isValid 就会返回 false,而当前帧内 isValid 仍然会是 true。如果希望判断当前帧是否调用过 destroy,请使用 cc.isValid(obj, true)
	
	node.group = "palyer";//将节点的组改为玩家(用于碰撞检测)
  },
});

二、常用方法

1.注册事件

在节点上注册指定类型的回调函数,也可以设置 target 用于绑定响应函数的 this 对象。
鼠标或触摸事件会被系统调用 dispatchEvent 方法触发

//在节点上注册指定类型的回调函数,当发生事件时调用绑定的callback
this.node.on(cc.Node.EventType.TOUCH_START, this.memberFunction, this);  
node.on(cc.Node.EventType.TOUCH_START, callback, this);//触摸按下
node.on(cc.Node.EventType.TOUCH_MOVE, callback, this);//触摸移动
node.on(cc.Node.EventType.TOUCH_END, callback, this);//触摸结束
node.on(cc.Node.EventType.TOUCH_CANCEL, callback, this);//取消
node.on(cc.Node.EventType.ANCHOR_CHANGED, callback);
node.on(cc.Node.EventType.COLOR_CHANGED, callback);

注册节点的特定事件类型回调,回调会在第一时间被触发后删除自身。

node.once(cc.Node.EventType.ANCHOR_CHANGED, callback);

删除之前与同类型,回调,目标或 useCapture 注册的回调。

this.node.off(cc.Node.EventType.TOUCH_START, this.memberFunction, this);
node.off(cc.Node.EventType.TOUCH_START, callback, this.node);
node.off(cc.Node.EventType.ANCHOR_CHANGED, callback, this);

移除目标上的所有注册事件。

node.targetOff(target);

暂停当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。 如果传递 recursive 为 true,那么这个 API 将暂停本节点和它的子树上所有节点的节点系统事件。

node.pauseSystemEvents(true);

恢复当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。 如果传递 recursive 为 true,那么这个 API 将恢复本节点和它的子树上所有节点的节点系统事件。

node.resumeSystemEvents(true);

2.动作

执行并返回该执行的动作。该节点将会变成动作的目标。
调用 runAction 时,节点自身处于不激活状态将不会有任何效果。
注意:你不应该修改 runAction 后的动作,将无法发挥作用,如果想进行修改,请在定义 action 时加入。

var action = cc.scaleTo(0.2, 1, 0.6);
node.runAction(action);
node.runAction(action).repeatForever(); // fail
node.runAction(action.repeatForever()); // right

暂停本节点上所有正在运行的动作。和 cc.director.getActionManager().pauseTarget(node); 等价。

node.pauseAllActions();

恢复运行本节点上所有暂停的动作。和 cc.director.getActionManager().resumeTarget(node); 等价。

node.resumeAllActions();

停止并且移除所有正在运行的动作列表。

node.stopAllActions();

停止并移除指定的动作。

var action = cc.scaleTo(0.2, 1, 0.6);
node.stopAction(action);

停止并且移除指定标签的动作。

node.stopAction(1);

通过标签获取指定动作。

var action = node.getActionByTag(1);

3.修改属性

获取节点在父节点坐标系中的位置(x, y)。

cc.log("Node Position: " + node.getPosition());

设置节点在父节点坐标系中的位置。
可以通过两种方式设置坐标点:

1)传入 2 个数值 x 和 y。
2)传入 cc.v2(x, y) 类型为 cc.Vec2 的对象。

node.setPosition(cc.v2(0, 0));
node.setPosition(0, 0);

获取节点的缩放。当 X 轴和 Y 轴有相同的缩放数值时。

cc.log("Node Scale: " + node.getScale());

设置节点的缩放比例,默认值为 1.0。这个函数可以在同一时间修改 X 和 Y 缩放。

node.setScale(cc.v2(1, 1));
node.setScale(1);

设置该节点以局部坐标系 Z 轴为轴进行旋转的角度。

node.setRotation(-20);

获取该节点以局部坐标系 Z 轴为轴进行旋转的角度。

node.getRotation();

获取节点自身大小,不受该节点是否被缩放或者旋转的影响。

cc.log("Content Size: " + node.getContentSize());

设置节点原始大小,不受该节点是否被缩放或者旋转的影响。

node.setContentSize(cc.size(100, 100));
node.setContentSize(100, 100);

获取节点锚点,用百分比表示。
锚点应用于所有变换和坐标点的操作,它就像在节点上连接其父节点的大头针。
锚点是标准化的,就像百分比一样。(0,0) 表示左下角,(1,1) 表示右上角。
但是你可以使用比(1,1)更高的值或者比(0,0)更低的值。
默认的锚点是(0.5,0.5),因此它开始于节点的中心位置。
注意:Creator 中的锚点仅用于定位所在的节点,子节点的定位不受影响。

cc.log("Node AnchorPoint: " + node.getAnchorPoint());

设置锚点的百分比。

node.setAnchorPoint(cc.v2(1, 1));
node.setAnchorPoint(1, 1);

4.坐标

将一个点转换到节点 (局部) 坐标系,并加上锚点的坐标。
也就是说返回的坐标是相对于节点包围盒左下角的坐标。
这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToNodeSpaceAR。

var newVec2 = node.convertToNodeSpace(cc.v2(100, 100));

将一个相对于节点左下角的坐标位置转换到世界空间坐标系。 这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToWorldSpaceAR

var newVec2 = node.convertToWorldSpace(cc.v2(100, 100));

将一个点转换到节点 (局部) 空间坐标系,这个坐标系以锚点为原点。

var newVec2 = node.convertToNodeSpaceAR(cc.v2(100, 100));

将节点坐标系下的一个点转换到世界空间坐标系。

var newVec2 = node.convertToWorldSpaceAR(cc.v2(100, 100));

5.获取包围盒

返回父节坐标系下的轴向对齐的包围盒。

var boundingBox = node.getBoundingBox();

返回节点在世界坐标系下的对齐轴向的包围盒(AABB)。
该边框包含自身和已激活的子节点的世界边框。

var newRect = node.getBoundingBoxToWorld();

6.针对节点操作

添加子节点,并且可以修改该节点的 局部 Z 顺序和名字。

node.addChild(newNode, 1, "node")

停止所有正在播放的动作和计时器。

node.cleanup();

获取该节点的父节点。

var parent = this.node.getParent();

设置该节点的父节点。

node.setParent(newNode);

属性配置函数。在 attrs 的所有属性将被设置为节点属性。

var attrs = { key: 0, num: 100 };
node.attr(attrs);

通过 uuid 获取节点的子节点。

var child = node.getChildByUuid(uuid);

通过名称获取节点的子节点。

var child = node.getChildByName("Test Node");

遍历该节点的子树里的所有节点并按规则执行回调函数。 对子树中的所有节点,包含当前节点,会执行两次回调,prefunc 会在访问它的子节点之前调用,postfunc 会在访问所有子节点之后调用。 这个函数的实现不是基于递归的,而是基于栈展开递归的方式。 请不要在 walk 过程中对任何其他的节点嵌套执行 walk。

node.walk(function (target) {
    console.log('Walked through node ' + target.name + ' for the first time');
}, function (target) {
    console.log('Walked through node ' + target.name + ' after walked all children in its sub tree');
});

从父节点中删除该节点。如果不传入 cleanup 参数或者传入 true,那么这个节点上所有绑定的事件、action 都会被删除。
因此建议调用这个 API 时总是传入 false 参数。
如果这个节点是一个孤节点,那么什么都不会发生。

node.removeFromParent();
node.removeFromParent(false);

移除节点中指定的子节点,是否需要清理所有正在运行的行为取决于 cleanup 参数。
如果 cleanup 参数不传入,默认为 true 表示清理。

node.removeChild(newNode);
node.removeChild(newNode, false);

移除节点所有的子节点,是否需要清理所有正在运行的行为取决于 cleanup 参数。
如果 cleanup 参数不传入,默认为 true 表示清理。

node.removeAllChildren();
node.removeAllChildren(false);

是否是指定节点的子节点?

node.isChildOf(newNode);

销毁所有子节点,并释放所有它们对其它对象的引用。
实际销毁操作会延迟到当前帧渲染前执行。

node.destroyAllChildren();

销毁该对象,并释放所有它对其它对象的引用。
实际销毁操作会延迟到当前帧渲染前执行。从下一帧开始,该对象将不再可用。 您可以在访问对象之前使用 cc.isValid(obj) 来检查对象是否已被销毁。

obj.destroy();

7.组件

获取节点上指定类型的组件,如果节点有附加指定类型的组件,则返回,如果没有则为空。
传入参数也可以是脚本的名称。

// get sprite component.
var sprite = node.getComponent(cc.Sprite);
// get custom test calss.
var test = node.getComponent("Test");

返回节点上指定类型的所有组件。

var sprites = node.getComponents(cc.Sprite);
var tests = node.getComponents("Test");

递归查找所有子节点中第一个匹配指定类型的组件。

var sprite = node.getComponentInChildren(cc.Sprite);
var Test = node.getComponentInChildren("Test");

递归查找自身或所有子节点中指定类型的组件

var sprites = node.getComponentsInChildren(cc.Sprite);
var tests = node.getComponentsInChildren("Test");

向节点添加一个指定类型的组件类,你还可以通过传入脚本的名称来添加组件。

var sprite = node.addComponent(cc.Sprite);
var test = node.addComponent("Test");

删除节点上的指定组件,传入参数可以是一个组件构造函数或组件名,也可以是已经获得的组件引用。 如果你已经获得组件引用,你也可以直接调用 component.destroy()

node.removeComponent(cc.Sprite);
var Test = require("Test");
node.removeComponent(Test);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CocosCreator新手教程——cc.Node基础常用接口(API) 的相关文章

  • 2021-05-22 SONiC 系统配置命令

    2021 05 20 SONiC 系统管理 39 SONiC系统配置命令 config help This command lists all the possible configuration commands at the top l
  • 2021-05-27 SONiC 系统配置显示命令

    2021 05 27 SONiC 系统管理 40 SONiC系统配置显示命令 show help This command displays the full list of show commands available in the s
  • 2021-06-07 SONiC 系统基于优先级的流控PFC配置命令

    2021 06 07 SONiC 系统管理 42 SONiC 系统基于优先级的流控PFC配置命令 IEEE 802 1Qbb定义的基于优先级的流控Asymmetric Priority Flow Control功能可以在端口上为每个不同的优
  • 2021-06-25 SONiC 系统BGP配置命令

    2021 06 25 SONiC 系统BGP配置命令 SONiC系统BGP配置 SONiC系统所默认包含的BGP模块在201811版的SONiC之前是开源的Quagga软件 xff0c 之后改成了更流行的FRR FRR中的Show命令是以
  • 2021年8月14日 七夕节的相遇 SONiC+P4实现

    2021年8月14日 七夕节的相遇 SONiC 43 P4实现 ONF启动了PINS项目 xff0c P4 integrated network stack
  • 2021-08-20 SONiC中的FRR和Zebra

    2021 08 20 SONiC中的FRR和Zebra SONiC中采用FRR和Zebra处理路由协议 以前写过SONiC系统所默认包含的BGP模块在201811版的SONiC之前是开源的Quagga软件 xff0c 之后改成了更流行的FR
  • 2021-08-29 SONiC中基于策略的哈希配置

    SONiC中基于策略的哈希配置 SONiC可以支持对不同类型的报文采取不同的Hash算法 对于多通道 多链路连接的情况 xff0c 如LAG和ECMP的接口上 xff0c 交换机和路由器采用Hash算法对报文中指定的字段进行Hash计算 x
  • 2021-09-19 当SONiC遇到P4之二

    当SONiC遇到P4之二 P4描述SAI 在当SONiC遇到P4中介绍了用P4来实现SAI Model的方式 xff0c 这种方式利用了P4数据平面编程的功能实现了SAI模型 xff0c 将P4和SONiC这两个分别位于网络数据平面和控制平
  • Cmake 模板和语法

    开始一直犹豫是不是要学cmake对于一个没有项目驱动的人来数 xff0c 感觉用不用都可以 我大可用一个简单的Makefile模板来做一些简单的工程阿 或者我还可以用autotools等 不过既然已经看了一个晚上了 xff0c 还是把它弄懂
  • 2021-09-25 SONiC系统管理32 IFA

    SONiC系统管理32 IFA Inband flow analyzer SONiC系统支持Telemetry的功能 xff0c 在INT中介绍了带内遥测In band Network Telemetry INT 对于遥测的结果 xff0c
  • 自动驾驶网络

    自动驾驶网络 网络为啥要自动驾驶 网络为啥要自动驾驶 自动驾驶网络首先要解决网络测量的问题 有测量才能完成闭环的控制
  • 怎样为SONiC社区做贡献

    64 TOC 2023继续前行 怎样为SONiC社区做贡献 SONiC在社区参与者的贡献下不断成长 xff0c 已经取得了网络操作系统事实上一统江湖的地位 同时SONiC也在不断扩大应用范围 xff0c 国内知名大厂最近在SONiC社区申请
  • cnblog上写了几个PR的内容解读

    cnblog上写了几个PR的内容解读 xff0c 欢迎参观 SONiC系统利用YANG来描述配置文件的格式 基于Radius的认证方式把登录用户的安全认证放在一个集中的Radius服务器上 xff0c 被登录设备在需要进行登录用户认证的时候
  • 无人机基础知识

    刚玩无人机或者想玩无人机的朋友 xff0c 想和圈内人交流交流get新技能 xff0c 却总有点张不开口 xff0c 怕问题一说出来就被鄙视得体无完肤 xff0c 没法继续交流了 不过 xff0c 不了解一些基本常识 xff0c 不记住几个
  • tensorflow解决keras报错 “AlreadyExistsError: Another metric with the same name already exists.“

    tensorflow解决keras报错 34 AlreadyExistsError Another metric with the same name already exists 34 最近要用到keras的一些API xff0c 用co
  • 一、Docker安装及初始化配置(Linux版)

    Docker安装及初始化配置 xff08 Linux版 xff09 1 安装前准备2 docker安装3 docker配置 1 安装前准备 1 切换root用户 xff1a sudo su 2 配置网络源 xff1a vi etc apt
  • 三、Docker常用命令和部署实例(Linux和Windows通用)

    Docker常用命令和部署实例 xff08 Linux和Windows通用 xff09 一 Docker组件和常用命令二 Docker服务命令三 Docker镜像命令四 Docker容器命令五 Docker实例练习1 MySQL容器部署2
  • 四、Dockerfile应用案例教程(将一个或多个jar包部署到docker容器中运行)

    Dockerfile应用案例教程 1 现有环境2 部署方式方式一 xff1a 直接部署jar包为容器 xff08 单个jar包 xff09 方式二 xff1a 以启动jar包打包镜像 xff0c 部署容器 xff08 单个和多个jar包均可
  • Ubuntu虚拟机设置网络桥接模式

    Ubuntu虚拟机设置网络桥接模式 1 虚拟机网络模式介绍1 1 bridged 桥接模式 1 2 host only 主机模式 1 3 NAT 网络地址转换模式 2 设置网络桥接模式2 1 Windows网络适配器设置2 2 Window
  • 完美洗牌算法

    输入 xff0c 如何在O n 的时间 xff0c 用O 1 的空间 xff0c 将这个序列顺序改为 输入 xff1a 1234567dbcdefg 则输出1a2b3c4d5e6f7g 公式 xff1a y 61 2x mod xff08

随机推荐

  • Windows系统安装及初始化设置

    Windows系统安装激活及初始化设置 1 系统安装1 1 iso镜像下载1 2 系统启动盘制作1 3 BIOS设置1 4 常见问题及解决方式问题1 xff1a 引导方式错误 xff08 ERROR BIOS LEGACY BOOT OF
  • E: Problem executing scripts APT和E: Sub-process returned an error code问题修复

    E Problem executing scripts APT Update Post Invoke Success和E Sub process returned an error code问题修复 问题描述原因分析和解决方案 问题描述 在
  • 解决Docker拉取镜像报Error response from daemon: error parsing HTTP 408 response body的问题

    解决Docker拉取镜像报Error response from daemon error parsing HTTP 408 response body的问题 问题描述原因分析和解决方案 xff1a xff1a 问题解决验证 问题描述 Do
  • ROS下运行ORB-SLAM2双目Stereo(官方数据集)

    写在前面 xff1a Ubuntu版本 ROS版本 opencv版本一定要对应 xff01 xff01 xff01 否则后边编译和运行过程中会有许多问题 xff0c 配环境配到怀疑人生 xff01 我的实验环境为 xff1a ubuntu1
  • Arduino学习总结(未完待续)

    文章目录 Arduino 学习硬件认识Arduino UNO 主要元器件Arduino 端口 软件认识Arduino IDEArduino 程序架构程序基础内容简述数据类型时间控制 计时函数延时函数 串口通信 x1f4de 端口间通信的类型
  • rosdep update 超时问题解决

    span class token operator lt span br span class token operator gt span reading span class token keyword in span sources
  • gRPC学习入门

    grpc框架 参考资料 xff1a 官方文档教学grpc go入门https www cnblogs com hongjijun p 13724738 html GRPC是Google公司基于Protobuf开发的跨语言的 高性能的 通用的
  • 学习随笔#13 模型预测控制(MPC)

    MPC基本概念 模型预测控制 xff08 MPC xff09 是指通过模型来预测系统在某一未来时间段内的表现来进行优化控制 MPC多用于数位控制 xff0c 因此使用系统的离散型状态空间表达形式 xff0c 即 x k 43 1
  • C++ 关于编译期的优化处理

    C 43 43 关于编译期的优化处理 一 define WIN32 LEAN AND MEAN 的作用 1 xff1a 为什么要 define WIN32 LEAN AND MEAN 答案很简单 xff0c 因为要包含尽量精简的内容 xff
  • 数据结构与算法(一)复杂度分析(上):时间复杂度和空间复杂度

    复杂度分析是整个算法学习的精髓 xff0c 只要掌握了它 xff0c 数据结构和算法的内容基本上就掌握了一半 为什么需要复杂度分析 xff1f 你可能会有些疑惑 xff0c 我把代码跑一遍 xff0c 通过统计 监控 xff0c 就能得到算
  • 输入和输出缓冲区更新(试过成功)

    原文 xff1a http blog csdn net u010064842 article details 8769229 1 区分概念 什么是缓冲区 缓冲区又称为缓存 xff0c 它是内存空间的一部分 也就是说 xff0c 在内存空间中
  • 数据结构与算法(一)复杂度分析(下):不同情况下的复杂度变化

    最好 最坏情况时间复杂度 span class token comment n表示数组array的长度 span span class token keyword int span span class token function fin
  • Windows开发:鼠标操作

    本文为作者原创 xff0c 转载请注明出处 一般情况下 xff0c Windows平台下可以使用mouse event函数实现鼠标操作 我们这里使用更新后的SendInput函数 span class token keyword bool
  • RawInput 输入流程【Windows操作系统】

    转载请注明出处 除了键盘和鼠标以外 xff0c 还有很多其他的用户输入设备 xff0c 比如手柄 触摸屏 麦克风等等 xff0c 这些设备统称为人机接口设备HID xff08 Human Interface Device xff09 xff
  • Win10 键盘输入法消失后如何恢复

    原创文章允许转载 xff0c 转载请著明出处 xff0c 不得用于商业用途 xff0c 否则保留法律追责权力 一般Win10 系统在不断地更新过程中 xff0c 会造成一部分数据不同步的问题 xff0c 有时候会发现设置好的英文输入法不见了
  • Windows10安装WDK

    安装包下载 xff08 5 11 2022 xff09 官网地址 xff1a 下载 Windows 驱动程序工具包 WDK Windows drivers Microsoft Docs 点击蓝体字样即可下载 问题汇总 问题1 xff1a 安
  • Windows 无法打开启动配置数据存储拒绝访问

    在我们输入一些命令时会遇到如下报错 xff0c 一般情况下是由于运行cmd的账户权限导致的 方法1 xff1a 1 在系统盘C windows system32 xff08 当前系统安装所在磁盘盘符 xff09 下查找到cmd命令提示符可执
  • 人机交互设备(HID)

    人机交互设备 xff08 HID xff09 是一个设备类型 xff0c 为了使用通用USB接口支持HID设备来代替PS 2接口类型的设备 xff0c 例如键盘 鼠标和游戏控制器等等 在 HID 之前 xff0c 设备只能使用规定好的鼠标或
  • ubuntu服务器安装可视化桌面(Gnome)

    作者 xff1a 锕琅 原文链接ubuntu服务器安装可视化桌面 xff08 Gnome xff09 知乎 目录 基础环境配置和安装 1 切换用户为Root 2 更新获取软件及版本信息 3 安装VNC4Server 4 启动VNC Gnom
  • CocosCreator新手教程——cc.Node基础常用接口(API)

    CocosCreator开发笔记 cc Node基础常用接口 xff08 API xff09 一 常用属性 cc Class extends cc Component properties sprite default null type