Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Cocos2d对CCDirector暂停方法的质疑_Iphone_Ios_Cocos2d Iphone_Game Engine - Fatal编程技术网

Iphone Cocos2d对CCDirector暂停方法的质疑

Iphone Cocos2d对CCDirector暂停方法的质疑,iphone,ios,cocos2d-iphone,game-engine,Iphone,Ios,Cocos2d Iphone,Game Engine,我已经看过好几篇关于这个的帖子,但我还是不明白 如果我调用CCDirector pause方法,它会将动画间隔设置为1/4,值isPaused_uu设置为YES(请参见下面的代码)。在CCDirector.m类中,isPaused\uu变量 除了暂停和恢复方法之外,似乎没有太多使用 因此,我决定也调用stopAnimation方法,但在一些帖子中没有提到: [[CCDirector sharedDirector] stopAnimation] 它显然不会停止加速计数据和输入数据发送到主场

我已经看过好几篇关于这个的帖子,但我还是不明白

如果我调用CCDirector pause方法,它会将动画间隔设置为1/4,值isPaused_uu设置为YES(请参见下面的代码)。在CCDirector.m类中,isPaused\uu变量 除了暂停和恢复方法之外,似乎没有太多使用

因此,我决定也调用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"];
}

暂停CCDirector可将帧速率降低到4 fps,以节省电池和CPU周期。如果使用UIKit视图,则必须使用后者。在某些情况下,必须暂停控制器,以便UIKit动画能够平滑地设置动画

暂停控制器也会停止更新所有节点。具体来说,CCScheduler不会触发任何预定选择器或更新方法。它还防止触摸传递到节点,因为它们通过CCTouchDispatcher进行中继,当控制器暂停时,CCTouchDispatcher也会暂停

但正如您所注意到的,加速度计没有暂停。这是因为cocos2d没有为UIAccelerator提供包装,因此您可以直接从iOS获得这些通知,而忽略控制器的暂停状态。然后,如果更改didAccelerate方法或直接从该方法调用的另一个方法中的节点位置,则尽管控制器已暂停,该节点仍将更改其位置

这只是导演的暂停不适合“暂停游戏”功能的一个原因。另一个问题是暂停会阻止任何使用cocos2d功能构建的暂停菜单也会暂停,这与暂停的目的背道而驰


然后startAnimation和stopAnimation只是阻止cocos2d完全更新屏幕的极端措施。这通常仅在cocos2d视图临时从视图层次结构中删除、隐藏或某些UIKit视图全屏显示的情况下使用。从这个意义上说,停止动画就像一个暂停功能。

谢谢您的回答。我有一个疑问。我暂停了导演,在那一刻,我制作了一个带有按钮的菜单,允许用户继续游戏。当我按下它们时,它们会触发我提供的“选择器”方法。您提到CCTouchDispatcher已暂停,它应处理所有触摸事件。但是为什么CCMenu按钮项可以检测触摸并触发“选择器”方法?很抱歉问这个问题。如果你不介意的话,我会尽快接受答案。