ts语言。
A继承自cc.Component
B继承自A,重写了getXXX()函数
node.addComponent(B);
let script = node.getComponent(A); //返回值为null
各位大神帮忙看看。
ts语言。
A继承自cc.Component
B继承自A,重写了getXXX()函数
node.addComponent(B);
let script = node.getComponent(A); //返回值为null
各位大神帮忙看看。
想了会儿,有个解决方案,这样:
let script = node.getComponent(cc.Component);
let c = script as A;
c.getXXX(); //正确了
然后还有个问题,上面这种写法对于一个node上只有一个脚本的情况还行,如果不止一个,还得作些判断,封装下面这样一个函数可以用:
function getComponent(node:cc.Node, T) {
let components = node.getComponents(cc.Component);
for(let idx=0;idx<components.length;idx++) {
let component = components[idx];
let ret = component as T;
if(ret != null) {
return ret;
}
}
return null;
}
这个函数随手写的,不知道语法上有没有问题,反正就是这个意思。
我觉得getComponent接口的设计应该要支持有继承体系的脚本组件获取,大佬们搞搞啊。
我看不太懂为什么会失败,Creator 是支持继承的。应该是你什么地方搞错了吧?
我试过直接get父类,是可以获取子类的实例的
肯定是其他地方出错了,你给出的这几行应该不会出现问题。creator里面继承和多态都是能用的。
真的有问题。
我再简洁点描述一下:
首先,
B extends A,这是前提,然后写下面这句代码:
node.addComponent(B);
然后,
let a:A = node.getComponent(A); //这里就有问题了,返回的a值为null
你可以看一下node是否添加成功了B
添加成功了的,因为我getComponent(B)这样获取就没问题,getComponent(A)就有问题。
你手动添加A然后get试试
麻烦提供一个 demo
知道原因了:
const {ccclass, property} = cc._decorator;
@ccclass
export class Base extends cc.Component {
}
export class A extends Base {
}
这样写就有问题
去掉前面两行代码就没问题了。能解释下原因不。
要调试看看,估计是 export 写法的问题。不过按理说每个组件都必须加上 @ccclass 的
好的,麻烦搞明白了通知下哦
是这样的,一个文件里面只能导出一个可以挂的组件类,你这个a写在另一个文件里就行
当然,@ccclass还是要的
啥叫可以挂?在编辑器上拖到node上么?
@ccclass什么作用?
我现在几个类都放在一个文件中,没问题了,我的脚本都是代码里加到 node上去的。
Creator 组件,都应该声明为 @ccclass,以便和编辑器、引擎联动。
testExtends.zip (575.4 KB)
你好。 ts中 简单的继承 没有效果。 helloword 继承testExtend ,没有进入testExtend的onload方法。 附件中是demo。不知道哪里设置出问题了还是 2.0.2的bug呢
我也遇到了这个问题getComponent获取继承关系的组件基类 为null,但是这个节点的属性里已经有这个基类的所有属性
我的解决办法 const {ccclass, property} = cc._decorator;这个 property 我没有用到,我把property这个给删了就没有问题了
应该是node.getComponent(B)