我已经在其他地方发布了这个问题,但是由于 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 代码。
有没有人有任何想法?
谢谢