C3D 1.1.1 schedule方法时间间隔错误

可重现代码

import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;

@ccclass
export class Typescript extends Component {
    start() {
        this.schedule(() => {
            console.log(new Date())
        }, 1)
    }
}

期望效果
每1秒打印1次时间

实际效果
每500ms打印1次时间,如图

scheduleOnce 方法也有同样问题

没发现这个问题,项目已经升级到 1.1.1 加了新东西了,有没有简便的方法能处理一下的……。

临时解决方案:

import { Component } from "cc";

// 临时解决 1.1.1 schedule 和 scheduleOnce 的 BUG
let originalSchedule = Component.prototype.schedule;
let originalScheduleOnce = Component.prototype.scheduleOnce;
Component.prototype.schedule = function (cb, interval, repeat, delay) {
    return originalSchedule.call(this, cb, (interval || 0) * 2, repeat, delay);
}
Component.prototype.scheduleOnce = function (cb, delay) {
    return originalScheduleOnce.call(this, cb, (delay || 0) * 2);
}

我这里测试不会出现这种现象,能不能发一个 demo。
你自己检测的话可以打印看看每次输出 log 的组件或者节点 id 是否一致

@ccclass
export class Typescript extends Component {
    start() {
        this.schedule(() => {
            console.log(this.node.uuid + '<' + this.uuid + '>: ' + new Date())
        }, 1)
    }
}

我猜测是不同的组件对象打印出来的,也就是有多个 scheduled tasks

以上代码的返回如图:

demo如下:

C3D_111_TEST.zip (792.6 KB)

版本:Creator 3D 1.1.1 社区版

奇怪了,我用你的案例还是没能重现问题

9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:04 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:05 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:06 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:07 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:08 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:09 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:10 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:11 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:12 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:13 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:14 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:15 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:16 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:17 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:21 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:22 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:23 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:24 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:25 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:26 GMT+0800 (中国标准时间)
typescript.ts:10 9bYfN3AQ5Epb9oJUOlbMaT<a6Jl3z799NnLtdTKZM9Xh+>: Sun Jun 28 2020 14:32:27 GMT+0800 (中国标准时间)

你的运行环境是什么?用的是预览还是构建?

难道是因为某种原因主循环被执行了两次?

我这边的1.1.1的BUG是EVENT_RENDERER_INITED事件没有注册成once导致注册了两个schedule的system调用造成的,新的事件写法里面once调用CallbacksInvoker.on之前once参数被game.on过滤掉了

1赞

哦哦,非常感谢这个补充,应该就是这个原因导致的,我这边没能重现是因为在 v1.1.1 最新版本中已经修复了

@k8w 已更新

1赞