我通过如下代码: let scene: Scene = director.getScene(); 获取了Scene根节点。
可是Scene却是继承自BaseNode, scene.getChild返回的全是Scene类型的子节点,我不知道这样设计是为什么?scene下的子节点全是Scene类型节点? 麻烦引擎组的各位大佬好好想想各种概念再设计一下,用着真他妈不方便!!!!!
你这是什么版本会出现这种情况呢,我在 3.4.2 看得到的子节点全部都是 node 类型的呀
3.4.2
scene的子节点是一般都是Node了 可是通过scene的方法获取子节点返回的类型是Scene
复议,这个设计真的是让人醉了
接口一直是这样错的,很多人都反应过了,然而没什么卵用
引擎组的大大们难道总是习惯性装睡????
抑或认为自己的设计实在是吊炸天,一般人理解不了,所以不予回应!
不是,这是 TS 类型标注的问题,还没找到方法解决 
整懵了,2.x升上来就说这个director.getScene()?.getChildByName(‘Canvas’)获取的咋是Scene
有临时解决方法吗,as转换不行
this.node.parent = cc.director.getScene().getChildByName(‘Canvas’) as any;
直接转 any 就好了不会报错
any后没提示了,也不美观
你赋值给一个节点不就有了…为啥会没提示
少点抱怨,应用层可以这么解决
const scene = director.getScene();
const children = scene.children as unknown as Node[];
console.log(children);
应该可以通过泛型等方式解决提示问题,大家稍安勿躁,这个问题我们一定会修好的。
讲实话如果没有 base node,children 直接返回 Node 就好了。有了之后才需要 this,才引发这个 ts 的类型问题。
base node 是 17 年的时候,Cocos 3D 刚立项,为了支持 3D 节点引入到 Creator 的。当时在引擎 3d 分支基于 baseNode 做了不少工作,所以这个设定就一直遗留下来了。软件架构这种东西确实很难做到完全不走弯路,当时也没想到全面用 ts 重写后会出现智能提示的问题。频繁更改架构也是大忌,将来这块架构如果要再调整,我们应该是会配合开放世界、push/popScene 等需求再一起像你说的“好好想想各种概念再设计”了。
所以,game.on和game.emit啥时候可以走一波心,让回调函数的参数个数对应起来,不用每次都逼我加@ts-ignore

