cc.director.getScheduler().schedule报错 cc.Scheduler: Illegal target which doesn't have uuid or instanceId

#更新一下,问题解决了,就像kenshin 说的,需要基于组件
###cc.director.getScheduler().schedule报错 cc.Scheduler: Illegal target which doesn’t have uuid or instanceId
###想确认一下
###cc.director.getScheduler().schedule:(callback, target, interval, repeat, delay, paused)

里面的target 必须是creator的node或者component之类的吗?不能是自己定义的类吗?

#报错信息如下

#注册函数如下

大家遇到过这个问题吗?creator 版本1.9.3

自定义类基于组件试试。

多谢回复,搞定这个问题了

如何解决

1赞

请问大神,如果直接使用cc.director.getScheduler().schedule,就会肯定出现“cc.Scheduler: Illegal target which doesn’t have uuid or instanceId.”这个问题吗?

请问 自定义的类,不行么,必须是 继承组件的吗

我来纠正一下题主的错误描述:joy:

1、传入的target任何类都可以,并不需要你一定是要继承于组件,
2、传入的target中存在有_id属性即可,
3、cc.Scheduler中也提供了一个注册方法为target添加这个属性:
      cc.director.getScheduler().enableForTarget(target);

注意: 我上述target 指的是需要用 Scheduler 管理任务的对象主体

1赞

自定义类可以

:joy:

creator 1.9 的好像没有这个方法 cc.director.getScheduler().enableForTarget(target),如果用ts写的话这个问题有点难解决。

你直接给你的 target 增加一个属性 _id 试试

上午试了,无效的,不知道ts编译之后这个_id的属性会存在什么地方。
class test{
.
.
.
constructor(){
this[’_id’] = 'test";
}
.
.
.

}

算了,不纠结了,我直接用setInterval了,方法总比困难多

2.0以上的是需要一个_id属性,刚刚看了下1.x的。@wimi
需要有一个uuid属性即可,下面是一个例子:

let target = { name: “lwk”, age: 22, sex: “man” }
target[“uuid”] = “Scheduler123”;
cc.director.getScheduler().schedule((dt) => {
        console.log(“dt”, dt);
}, target, 0.02, false);

下面是CCScheduler部分源码

有道理,我还以为是编译之后找不到 _id ,人比较懒没去翻1.X的代码。还是你细心点,非常感谢。