最近努力参考着
这篇文章
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那个本身的那个系统旋转动画,而是当屏幕拧过来是,立刻旋转刷新过来。