场景中包含比较多的Tween和Schedule, 实时性比较强的计时游戏
有什么更好的方式来控制游戏的暂停和恢复吗?
场景中包含比较多的Tween和Schedule, 实时性比较强的计时游戏
有什么更好的方式来控制游戏的暂停和恢复吗?
现在的暂停的逻辑是必须等全部的Tween完成,才允许暂停,但是被拒绝了
看到有讨论使用cc.director.pause()的,我这个暂停是指游戏逻辑全部暂停,弹出暂停菜单
要想达到只暂停你想暂停的内容,你就得加个标志开关,然后在你想控制的地方判断下这个,为true则不能动等等。
纯人工逻辑的话,有些地方是比较难以实现暂停的
比如:
播放中的粒子效果 cc.ParticleSystem 怎么暂停呢
我感觉题主的需求应该就是不能暂停粒子效果,只要控制不移动,让他原地播放,岂不美哉?
直接截个图 放在那就暂停了+cc.director.getScheduler().setTimeScale(0);
如果这样都不行的话,只能叫 都教授来了,他曾经使用过时间暂停,救过一个女孩!应该可以让整个世界都暂停,呼吸都暂停了已经是.万物皆可暂停.
感谢回复。
开关不行,因为很多tween都可能运行到一半
加个遮罩,一罩遮百丑,鬼知道你遮罩下面暂停没暂停
统一收集和管理tween和animation动画,分游戏逻辑和UI逻辑,统一做暂停和恢复处理
粒子不暂停也没关系吧。
这个需要在一开始架构的时候就想到,现在要加,如果严格的算基本上就是全盘重构(连cocos引擎都得推翻重写)。
不过话说回来,大部分游戏暂停的时候都有很多动画在动。
只要是不涉及到游戏内容的,没有完全暂停
就比如魔兽争霸3吧,暂停了之后闪电效果(类似闪电链,发力吮吸,生命汲取之类的技能特效)就没有暂停。
再比如DOTA2,暂停的时候,光影效果就没有暂停。
还有我玩过的很多冷门的游戏都是这样,数不胜数。
基本只就是大型3D动作类RPG才会很好地注意这点。(就比如塞尔达旷野之息,切换武器的时候就真的暂停了,不然的话悔恨滑稽,影响气氛)
其他游戏基本上并不太在乎这些。
你可以创建一个manager,将需要暂停的动作、音频之类的全部注册到这个manager,由它负责暂停和恢复
不只是遮罩的问题, 要求下面的逻辑必须全部暂停,就类似飞机大战的暂停,游戏内容要全部暂停下来
的确,当时构建之初偷懒了,挖了个大坑
是个方案,感谢
我们遇到的就是这种问题, 拿塞尔达切换武器举例子太恰当了
可能我场景里有好多“切换武器”的动画,移动的tween,定时器。
暂停需要将全部这些暂停,并弹出可以交互的遮罩暂停窗口,接着还要能恢复游戏
这个一开始做框架设计的时候就要考虑,把游戏对象的update自己封装一次,不用tween,动作由代码来统一控制,spine动画等等资源由统一的动画管理器控制
目前在用的做法是游戏逻辑update里开始加一条:
update(dt){
if(Game.Instance.IsPause){
return;
}
}
不考虑动画、粒子等
tween 可以用 actionManager来暂停
遍历改写里面的action属性 还能实现时间缓速效果
cc.director.getActionManager()
/**
!#en Pauses all running actions, returning a list of targets whose actions were paused.
!#zh 暂停所有正在运行的动作,返回一个包含了那些动作被暂停了的目标对象的列表。
*/
pauseAllRunningActions(): any[];
/**
!#en Resume a set of targets (convenience function to reverse a pauseAllRunningActions or pauseTargets call).
!#zh 让一组指定对象恢复运行(用来逆转 pauseAllRunningActions 效果的便捷函数)。
@param targetsToResume targetsToResume
*/
resumeTargets(targetsToResume: any[]): void;