3.4求普及下Ts静态知识 呼救

canvas下有2个节点 :Sprite1,Sprite2

2个脚本:InitMgr,ClipMgr

Sprite2节点挂InitMgr脚本,ClipMgr脚本不挂

InitMgr脚本只写了onLoad()

InitMgr脚本的onLoad执行另一个ClipMgr脚本自定义的静态方法Init()

节点图


运行报错

打印Animation和Animation.getState再次运行

发现Animation没问题,Clip名也没问题,但是获取不到播放状态

此时在InitMgr脚本上写start()方法


动画播放

我想知道是静态方法调用发生了什么问题,是怎么个顺序?还是说跟静态方法没关系,不太懂静态方法,静态变量这方面的知识

求大佬举例科普下谢谢

还有比ts官网更权威的科普了吗?
https://www.tslang.cn/

我想知道为什么静态方法访问不到AnimationState

最终的脚本运行
ClipMgr脚本


InitMgr脚本

运行

我想知道为什么Init方法获取AnimationState是NULL

sprite1上没挂脚本 有个叫animation1的clip
sprite2上挂InitMgr脚本

我的理解是onLoad()方法调用了另一个脚本的静态方法
onLoad(){
ClipMgr.Init()
}
是不是相当于
onLoad(){
ClipMgr.node = find(‘Canvas/Sprite1’) as unknown as Node
ClipMgr.animation = ClipMgr.node.getComponent(Animation) as unknown as Animation
console.log(ClipMgr.animation)
console.log(ClipMgr.animation.getState(‘animation1’))
}
console.log(ClipMgr.animation.getState(‘animation1’))这句话也不应该是null啊,我Animation都获取到了,Clip名也没错

求解答 别沉,,,

这个和静态类没啥关系,就是 onLoad 里动画相关的东西还没完全初始化好

1赞

Component 这个父类本身就有一个非静态属性叫 node 了,
你下面又给子类添加一个静态的属性还叫 node,这有点不合适,如果一个类你不需要挂到面板上,那就不用继承自 Component,整个类文件里也不用带 const {} = _decorator,也不用带@ccclass(‘InitMgr’),
干干净净一个

export class InitMgr {

}

卧槽 好像指明了

我现在就是想让一些脚本和节点分离 把获取节点那些和播放动画的分开来

所以这跟静态不静态无关是吗

上面动画拿不到状态值和静态无关,你在任何一个 onLoad 里直接拿,都是取不到的,应该是动画还没真正播放起来,所以没有状态值,在 start 里面就可以取到了,任何一个 start 都晚于任何一个 onLoad,应该是在这两个生命周期之间引擎调用了播放,然后 start 里就有值了

1赞

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。