如何在cocos2d中从后台恢复游戏后保持暂停状态?

时间:2012-02-21 09:30:31

标签: iphone cocos2d-iphone xcode4.2 2d-games

我有一个切换菜单,当按下它时,在“暂停”和“恢复”之间切换,这也会暂停和恢复整个游戏。这意味着在播放时,菜单将显示为“暂停”(点击此处暂停),暂停菜单时将显示“恢复”(点击此处继续)。

问题是,如果我在暂停游戏后点击主页按钮,然后返回到它,它会自动恢复,暂停菜单显示为“恢复”。这对我来说没有意义。我想要的最好的方法是每当进入后台并从后台恢复时暂停游戏。我看一下以下方法,但它们并没有真正起作用:

-(void)applicationWillResignActive:(UIApplication *)application{
}

- (void)applicationDidBecomeActive:(UIApplication *)application{
}

-(void)applicationWillEnterBackground:(UIApplication*)application{
}

-(void)applicationDidEnterBackground:(UIApplication *)application {
}

我甚至只是将CCLOG放在所有这些方法中,但没有任何方法被调用。在使用这些方法之前,我需要放置/声明一些东西吗?

抱歉,阅读时间太长了。希望您能够帮助我。谢谢。

3 个答案:

答案 0 :(得分:0)

我不确定为什么,但根据我的经验(不是cocos2d),如果要应用这些方法,则没有其他实现。

也许,你应该试着看看这个。

link 1& link 2

答案 1 :(得分:0)

-(void)applicationWillResignActive:(UIApplication *)application{
}

- (void)applicationDidBecomeActive:(UIApplication *)application{
}

你需要定制你的cocos2d CCDIRECTOR类。现在获取显示层。然后激活它暂停或恢复功能。所有这一切都需要一些协议。

答案 2 :(得分:0)

当iOS强制您的应用程序在后台运行或恢复应用程序的执行时,会调用这些方法,即当外部事件导致您的应用程序进入后台或从中返回时,它们是您收到的信号。您不应该尝试直接调用它们。除非您明确表达关系,否则与您的“用户创建”菜单(如“恢复/暂停”菜单)之间没有真正的关系。

因此,在以下方法中:

- (void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"<%@>:applicationWillResignActive - received signal, pausing sharedDirector.",[self class]);

    // here : place your code for forcing your menu in the 'Resume' state
    // i am assuming some kind of change in a button,  and
    // a state variable of your own that define and control
    // what it means to be 'paused' from your applications point of
    // view

    // then force the director to pause (animations, scheduling, touch, etc ...)

    [[CCDirector sharedDirector] pause];
}

之后,当iOS通过将您的应用程序作为正在运行的应用程序放置在forground中时,您可以将控制权交给您:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"<%@>:applicationDidBecomeActive - received signal, resuming sharedDirector.",[self class]);

    [[CCDirector sharedDirector] resume];
}

除了重新启动CCDirector之外,你真的不需要做任何想象,因为你的菜单处于'恢复'状态,保证。当用户按下Resume时,您将再次启动游戏并将菜单置于“Pause”状态。