0

我已经在其他地方发布了这个问题,但是由于 SO 是一个很棒的社区,所以我也在这里这样做。

首先,我使用 Cocos2D 2.0-gles20 将一个多人/团队导向的游戏组合在一起。

我一直在将 GameKitHelper 集成到应用程序中。迄今为止,它在我的 iPhone4 和 iPad2 以及模拟器上运行良好,但现在当我尝试在 iPod Touch 4th 上使用它时,我在 [CCDirectorIOS startAnimation] 中收到断言,因为该应用程序在它应该获得 viewWillAppear 时't 并且在应该的时候没有调用 viewDidDisappear 。

这很重要的原因是 CCDirectorIOS 类上的这些方法导致 Cocos2D 开始/停止动画,而另一个 UIKit 视图在前面。这是我用 Cocos2D-0.99 自己管理的东西,但在 2.0 中,它在 director 中得到了很好的处理,因此每个应用程序都不必专门处理它。

GameKitHelper 类具有以下将 GKMatchmakerViewController 推送到屏幕上的方法:

-(void) showMatchmakerWithInvite:(GKInvite*)invite
{
    GKMatchmakerViewController* inviteVC = [[[GKMatchmakerViewController alloc] initWithInvite:invite] autorelease];
    if (inviteVC != nil)
    {
        inviteVC.matchmakerDelegate = self;
        [self presentViewController:inviteVC];
    }
}

-(UIViewController*) getRootViewController
{
    return [CCDirector sharedDirector];
}

-(void) presentViewController:(UIViewController*)vc
{
    UIViewController* rootVC = [self getRootViewController];
    [rootVC presentModalViewController:vc animated:YES];
}

-(void) dismissModalViewController
{
    UIViewController* rootVC = [self getRootViewController];
    [rootVC dismissModalViewControllerAnimated:YES];
}

当我在 iPhone4 等上调用 showMatchmakerWithInvite 时,我在 CCDirectorIOS 对象上看到了对 viewDidDisappear: 的调用,该对象停止了动画。这可以。当 GK 视图消失时,我看到对 viewWillAppear 的调用会重新启动动画。甜的。

然而,在 iPod Touch 上,运行完全相同的项目,没有调用 viewDidDisappear,而是调用 viewWillAppear,在 GK 视图消失之前。

我无法理解为什么会有差异。所有设备都运行 iOS 5.1.1。

几乎就好像 UIKit 的行为在 iPod Touch 上有所不同,但我觉得这很难相信。我的另一个想法是我正在查看时间问题,但我放入了一些代码以允许应用程序即使出现问题也能继续运行,但对 viewDidDisappear 的调用从未发生过。

我认为我可以通过自己管理动画的开始/停止来解决这个问题,但我宁愿不自定义 Cocos2D 代码。

有没有人有任何想法?

谢谢

4

1 回答 1

0

好吧,作为一个没有耐心的人,我没有把它留给别人去做别的事情,我把它发疯了。

我发现有问题的 iPod Touch 设备在限制应用程序中禁用了多人游戏。这似乎导致 GK 视图无法“正确”显示,因此像 viewDidDisappear: 和 viewWillAppear: 这样的事件不会像我预期的那样发生。

所以我已经能够恢复我在 Cocos2D 代码中的所有调整和检测,并简单地对 GameKitHelper 类进行更正,以确保如果多人游戏等功能被禁用,玩家将无法请求它们.

于 2012-07-01T14:21:33.260 回答