如题,实际开发经常遇到如下场景:暂停游戏全部逻辑,弹出菜单或者复活界面,用户选择好了再继续游戏.
这个场景不能暂停整个游戏,因为要处理菜单.只有手动实现单个节点的暂停,暂停单个节点需要把:碰撞检测,动作,物理引擎,计时器,渲染,音乐,动画全部暂停.很是复杂
要是有这个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);
}
- 物理系统没有屏蔽
- 如果我一开始就主动暂停了某个动画,然后我调用暂停和恢复,则会主动将我的暂停打开,所以应该添加一个临时状态记录。
- 其它自定义组件没有涉及,涉及时依然要考虑第二点
既要又要。
godot有,cc就这样了,自己想办法
类似 小时候玩三国战纪 使用了延军令 所有事件都被减速 除了操作者
单个节点暂停使用active或者enable,取消事件使用off
像godot这样的新手引擎,基本是从简,可能只提供一个暂停接口而没有其他的