GameCenter制作初步完成,另附landscape问题解析


最近努力参考着

这篇文章

http://www.cnblogs.com/andyque/archive/2011/06/24/2088383.html

及这篇文章

http://www.cocoachina.com/gamedev/misc/2010/1022/2229.html

再结合iOS的帮助文档,将GameCenter部分整合进了游戏。

 

在这个过程中遇到一些问题,在这里都加以说明

 

关于Game Center Welcome通知条翻转问题:

一开始遇到了一个本来我游戏是横屏,但Game Center的登录通知(welcome back xxx)却按照portait的方式显示了出来,搜索攻略无果,只好按照iOS官方文章揣摩。

首先Game Center的通知类似于开启了一个新线程去处理接收返回通知的信息,当游戏运行起来后,在主线程发一个消息去获取Game Center登录信息,之后游戏主线程正常运行,而消息在认证后返回,这个消息会根据当前的app翻转状态弹消息,我的初始化步骤是:

[[GCGameCenter sharedInstance] authenticateLocalUser];
    
    
[window addSubview:viewcontroller.view];

之前有强制设置Status Bar屏幕向右翻转的(同时屏幕也会强制向右翻转)

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];

但由于后面加入了根据屏幕翻转状态调节,故去掉了这一句。

于是在通知返回的时候便找不到当前的Status Bar的翻转状态了。(Welcome back通知应该是根据当前应用的Status Bar的翻转状态来调整自己的显示方式的[猜测])

于是添加了两句强制状态条状态置位的操作后,问题解决,具体代码如下:

[[GCGameCenter sharedInstance] authenticateLocalUser];
    
    
[window addSubview:viewcontroller.view];
    
if(isRLeft)
{
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];
} else 
{
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
}


 

关于屏幕翻转

 

由于使用openGL对2D进行渲染,所以在调用ViewController的shouldAutorotateToInterfaceOrientation时,如果返回YES则总会旋转出错。

最后的解决办法是shouldAutorotateToInterfaceOrientation函数永远返回false,只在shouldAutorotateToInterfaceOrientation函数里对是否翻转进行判断,然后用一个bool变量表明是否翻转到left or 非left(right).之后在openGL渲染前,rotate OpenGL的渲染即可。

这样做的坏处是无法显示iOS那个本身的那个系统旋转动画,而是当屏幕拧过来是,立刻旋转刷新过来。

 

 

 

 

你可能感兴趣的:(游戏,ios,文档,2010)