游戏暂停的API还有待加强啊,没法暂停单个节点

如题,实际开发经常遇到如下场景:暂停游戏全部逻辑,弹出菜单或者复活界面,用户选择好了再继续游戏.
这个场景不能暂停整个游戏,因为要处理菜单.只有手动实现单个节点的暂停,暂停单个节点需要把:碰撞检测,动作,物理引擎,计时器,渲染,音乐,动画全部暂停.很是复杂

要是有这个api就牛逼了

追问一下这个功能引擎组有计划实现么? 其实使用场景很多的,比如类似于塞尔达那种获得宝物捧在手里展示一下,这时候整个世界其他物体都包括怪物,草木,光源,天气都是禁止的,或者和NPC对话,其他所有人物和物体都要禁止,光禁止脚本系统没用,动画系统,缓动系统,物理系统都要禁止,开发者自己维护这个禁止恢复系统几乎不可能

这个不是应该自己来实现的吗?????????????????????????????????????

总结:官方找任地狱把塞尔达代码拿过来发你。

你要加暂停,我要加杀进程后恢复原样,他要加断网重连暂停这和那。
明天要求只暂停天气,后天要去暂停天气的同时让草木0.5倍速不暂停,人物还要子弹时间。

看来你不懂我意思啊 大体效果是每个节点有个类似于active的属性 比如isPause 设为true引擎的所有系统就不更新该节点包括其子节点的所有数据 可以自己实现 但是效果很粗糙

这个只能自己实现,因为要屏蔽相应的逻辑代码、停止相应动画来实现暂停,而每个人逻辑代码都不一样。

找你们开发解决

我就是开发啊,我感觉这个功能引擎来实现比开发者自己实现要简单优雅的多 这不是什么特殊冷门的需求 而是引擎核心层应该有的功能,感觉现在这个论坛什么话都不能说了 如果cocos实现了不也是提升了引擎自己的竞争力么 不要和unity同质化竞争 这样肯定死,弄出差异化开发者才有非用不可的理由

  export function pauseRoot(root: cc.Node, pause: boolean) {
        pauseNode(root, pause);
        root.children.forEach((child) => {
            pauseRoot(child, pause);
        })
    }

    export function pauseNode(node: cc.Node, pause: boolean) {
        if (!node.active) return;
        if (node.getNumberOfRunningActions() > 0) {
            pause ? node.pauseAllActions() : node.resumeAllActions();
        }
        let coms: cc.Component[] = node.getComponents(cc.Component);
        coms.forEach((com => {
            pause ? cc.director.getScheduler().pauseTarget(com) : cc.director.getScheduler().resumeTarget(com);
            if (com instanceof cc.Animation) {
                pause ? com.pause() : com.resume();
            } else if (com instanceof sp.Skeleton) {
                com.paused = pause;
            }
        }))
        pause ? node.pauseSystemEvents(true) : node.resumeSystemEvents(true);
    }

  1. 物理系统没有屏蔽
  2. 如果我一开始就主动暂停了某个动画,然后我调用暂停和恢复,则会主动将我的暂停打开,所以应该添加一个临时状态记录。
  3. 其它自定义组件没有涉及,涉及时依然要考虑第二点

既要又要。

godot有,cc就这样了,自己想办法

类似 小时候玩三国战纪 使用了延军令 所有事件都被减速 除了操作者

单个节点暂停使用active或者enable,取消事件使用off

像godot这样的新手引擎,基本是从简,可能只提供一个暂停接口而没有其他的