cocos2d在ios5.1和ios6.1.2下设备方向不同

我现在正在用coco2d v1.0.1开发的一个项目(其中有部分是用UIKit的控件),需要保持屏幕方向始终为横向,在ios5.1的机器上测试没有问题(cocos2d 默认为横向),发布到ios6.1.2的机器上以后方向就会变成竖向,就算把AppDelegate.m中的方向设置修改成如下所示:

#if GAME_AUTOROTATION == kGameAutorotationUIViewController

//;//原来的代码

;

#else

;

#endif

其结果也仅仅是cocos2d的坐标系变成了横向,但我在ccTouchesBegan/Moved/End事件当中获取的点坐标依然是竖向的,而且所有UIkit控件的加载也是竖向的,继续修改了RootViewController.m中的shouldAutorotateToInterfaceOrientation函数,具体如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) );

}

结果没有任何反应,该怎样才能在ios6.1.2中使所有坐标系都是横向?

补充:我把修改之后的程序再次发布到ios5.1的机器上,发现5.1中cocos2d的坐标系居然变成了竖向,只有把AppDelegate.m中改回;才能正常显示横向,而按照它参数的意思不应该是“把设备方向定为竖向”吗?

ios 6.0 以上的横竖屏支持方法变了,需要写以下2个方法

-(NSUInteger)supportedInterfaceOrientations

{

return UIInterfaceOrientationMaskLandscape; // 只支持横屏

}

- (BOOL)shouldAutorotate

{

return YES; // 表示是否支持旋转

}

另外,如果你的程序只有横屏,可以在设置那边设置下,只选择横屏允许,然后你的界面controller类里加上上述方法,就可以了。

谢谢回答,刚刚试过了,显示可以横过来,但是touches中获得的坐标点还是竖屏的,X和Y轴依旧是颠倒的,是不是还有什么要注意的啊?

搞好了,自己来补充下吧,zjj_1105已经说的差不多了,但是在cocos2d的框架下开发还要注意一个问题,就是cocos2d中touches触摸点的获取是从EAGLView得到的,所以想要把触摸点的坐标一并修正,关键还是要把这个EAGLView的方向给转过来,这个EAGLView是在appDelegate中创建的,修正的方法是在EAGLView创建之前,给window设置一个rootViewController(一定要在创建之前设置,创建之后再设置是无效的),然后只要在设置里面选择支持的设备方向是横向就

在你给你的 window 设置了 rootViewController 后,6.0 的还要实现一个方法:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{

return UIInterfaceOrientationMaskLandscape;

}

不知道你实现了这个没。