我已经看过几篇帖子(例如this one),但我仍然没有得到它。
如果我调用CCDirector暂停方法,它会将动画间隔设置为1/4,值isPaused_设置为YES(参见下面的代码)。在 CCDirector.m 类中, isPaused _ 变量 在暂停和恢复方法中似乎没有被大量使用。
因此我决定也调用stopAnimation方法,但在某些帖子中没有提及:
[[CCDirector sharedDirector] stopAnimation]
它显然没有停止加速度计数据和输入数据发送到主场景。这对我有意义,因为游戏的开发者可能希望通过摇动iPhone或点击恢复按钮来允许用户恢复。 这是选择背后的原因吗?
另外,为什么动画间隔设置为1/4,为什么即使使用此值也不会移动(使用加速计输入移动的播放器实体除外)?
非常感谢!
-(void) pause
{
if( isPaused_ )
return;
oldAnimationInterval_ = animationInterval_;
// when paused, don't consume CPU
[self setAnimationInterval:1/4.0];
[self willChangeValueForKey:@"isPaused"];
isPaused_ = YES;
[self didChangeValueForKey:@"isPaused"];
}
答案 0 :(得分:2)
暂停CCDirector可将帧速降低至4 fps,以节省电池和CPU周期。如果你使用UIKit视图,后者是必要的,在某些情况下,有必要暂停导演以使UIKit动画能够流畅地制作动画。
导演也暂停了它会停止更新所有节点。特别是CCScheduler不会触发任何计划的选择器或更新方法。它还可以防止触摸被传递到节点,因为它们是通过CCTouchDispatcher中继的,当导演暂停时它也会被暂停。
但是正如您所注意到的那样,加速计没有暂停。那是因为cocos2d没有为UIAccelerometer提供包装器,因此您直接从iOS获得这些通知,忽略了导演的暂停状态。如果然后更改didAccelerate方法中的节点位置或直接从其调用的另一个方法,则该节点将更改其位置,尽管导演暂停。
这只是导演暂停不适合“暂停游戏”功能的一个原因。另一个问题是暂停只会阻止任何使用cocos2d功能构建的暂停菜单也会被暂停,这种目的无法实现。
然后startAnimation和stopAnimation就是阻止cocos2d完全更新屏幕的极端措施。这通常仅用于临时从视图层次结构中删除cocos2d视图或隐藏,或者某些UIKit视图全屏显示的情况。在这种意义上,stopAnimation就像一个暂停功能。