官方文档
关键词
文字记录
大家好,下边我们来到 coco 学习入门的 第八章 ,在这章里边我们来学习一些 API ,使用这些 API 来获取和访问每一个节点和组件。
那当我们构造一个游戏项目的时候,在层级管理器里边就可以看到它所有的节点。但是其实节点下边可能还挂了多个组件。那么每一个节点对象,每一个组件对象都是可以获取的。
比如说在这样的一个游戏项目里边,我们添加了若干个节点,比如说添加了一个佩奇的图片节点,然后有一个按钮节点,然后在佩奇下边又下挂了一个文字节点。那么这所有的节点都可以在这个 TypeScript 脚本里边来获取。那现在先来观察一下这个结构,这样好像是一个树形结构。
首先有一个canvas节点,canvas节点挂了一个佩奇这样的一个节点,用来先显示小猪的图片,然后又有名字用来显示小猪的名字。比如说我想点一下按钮,然后把佩奇的label 节点从头顶改变到下边。
怎么样来操作呢?你首先要获取到这个节点,然后再把它移动下来。那怎么样获取到这个节点呢?这就需要使用这些 API ,系统给我们提供了一些 API ,可以访问任何一个节点和任何一个组件
- 比如说你要访问当前节点的话,那就是 this.node ,它的类型就是 cc.node 这个类型
- 父节点就是 this.node.parent 比如说你得到了一个节点,想知道它的父节点,那就是. parent 就可以了。
- 子节点其实有多个,所以得到的是一个数组
, this.node.children 得到一个节点之后,然后 node.children 就是它下边的所有的子节点,可以看到这是一个数组的结构。
- 然后我们也可能使用 cc.find这样的一个全局方法来查找,查找的时候你只需要把这个名词路径给指定就好了
比如说在这里边我想查找一下名字这个节点,那么路径应该是,从头开始写就能够找到这个节点,如果要查找子节点的话,比如说你已经知道了一个节点,然后想在它的节点下边再查找一个子节点,也是这样的一个写法。
cc.find只是我们把第二个参数给指定一下,第二个参数表示的是它在哪个节点下面来找,把这个节点给传进来,如果返回值 null 的话,就表示没有找到,大概就是这样的用法。
我们希望在这里边点一下这个按钮,把我是佩奇这个名字节点,把它放在下边
首先我们还是添加一个脚本目录,然后在这脚本目录下边再添加一个 TypeScript
这个名字我们叫做 ButtonScript 因为我们将要把这个脚本附加给这个按钮
我们点中这个按钮,然后把它给添加过来
然后双击一下,在 VSCode 里边打开 buttonscript 这个脚本文件。
上面这两个其实现在用不到,所以把它给注释一下
那下边有一个 start 有一个 onload ,我们还是在 onload 里边来初始化。
当点击按钮的时候
onload(){
this.node.on("mousedown",this.onClicked,this);
}
- 那么this. node中this表示当前组件,就是这个 buttonscript 这个脚本组件
- this.node 就是当前的这个节点
- 然后 on 这个操作就表示当什么事件发生的时候,当鼠标点击下来的时候,调一个方法,这个方法叫onClicked。
下边我们需要来添加一个方法。
onClicked(){
}
这样,那就可以了,当鼠标点下去的时候,执行 onClicked的方法。
这个方法我们需要来获取目标节点。目标节点怎么样找到它呢?在这个节点树下面来找, cc.find 这个方法传入路径就可以了。首先是canvas,然后就是佩奇,再往后是名字,这是它的路径,注意大小写敏感。这里边我们按照 TypeScript 写法,应该把它的类型给写上,它的类型应该就是 cc.node 这个类型
找到这个 node 之后,那么就可以来把它位置往下移,把这个 node 的 position 设置一下。
当前这个位置应该是 x=0,y=200,也就是相对于它的父节点来说是0,200的位置,我们把它移到下边来,0,-200 ,这样的就可以了。这个坐标是相对于佩奇,相对于他父节点来说的,下边那么就可以来试下这个脚本好不好使,在这里边点一下保存,点一下 recompile 然后重新加载一下。
onClicked(){
let node:cc.Node = cc.find("Canvas/佩奇/名字");
node.setPosition(0,-200);
}
然后我们把开发者工具给打开一下,如果有错误的话,这里边会有日志的,现在我们来检查一下,点一下这个测试,可以发现这个就移到了下边。这个就演示了怎么样来获取一个节点,并且来修改这个节点的位置,你也可以修改为其他的参数也都可以。总之大致的思路,就这个样子的,我们调用这样的一个 API ,cc.find这个 API 就可以来获取这个节点,有了这个节点之后你想干什么基本上就可以了。
关于 cc.node 这些都在 API 里边都是可以搜索的,文档里边有 API 参考。