我有两个视图,其中一个是横向的,另一个是纵向的。默认方向是横向。当我使用
将视图从横向更改为纵向时[[CCDirector sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeRight];
虽然图形旋转完美,但我遇到触摸屏问题。有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
您使用的是最新的cocos2d模板吗? [[CCDirector sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeRight];
无法使用的原因是默认情况下,它允许UIKit (RootViewController)
处理轮换,请阅读第77-84行的注释。您的代码所做的是更改CCDirector
方向,而不是RootViewController
,因此您的触摸位置无法正确翻译。
您是否将Apple标准UIKit与cocos2d混合使用?如果您没有一个非常简单的解决方案,只需转到GameConfig.h
更改这些行
#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
#define GAME_AUTOROTATION kGameAutorotationUIViewController
到
#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
#define GAME_AUTOROTATION kGameAutorotationCCDirector
P.S根据您设置项目的方式,更改自动旋转处理程序可能/可能不起作用。
答案 1 :(得分:1)
实现正确的方向很简单,也很简单。您只需编辑RootViewController实现:只需修改它的-willChangeToInterfaceOrientation ...方法,即可为应用程序中所需的方向返回“YES”。例如,将所有可能性的返回值更改为
return ( (interfaceOrientation == UIInterfaceOrientationPortrait) ||
(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) );
完成后,只有横向朝向纵向时,您的应用才会旋转。您的应用程序(在这种情况下)仅支持纵向方向。 要正确地自动旋转您的应用以响应从肖像更改为portraitUpsideDown(反之亦然),只需编辑以下行以使用适当的值配置您的CCDirector实例:
if( interfaceOrientation == UIInterfaceOrientationPortrait ) {
[[CCDirector sharedDirector] setDeviceOrientation:
kCCDeviceOrientationPortraitUpsideDown];
} else if( interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[[CCDirector sharedDirector] setDeviceOrientation:
kCCDeviceOrientationPortrait];
}
模板项目中默认方法实现的评论中提到的所有内容!
不要忘记编辑应用的info.plist以包含密钥的适当值 -InitialInterfaceOriatation -SupportedInterfaceOrientations
您通常不需要更改应用委托级别和GameConfig.h中的任何内容。
而且......你去了!
答案 2 :(得分:0)
这很简单,只需将触摸点转换为GL
即可解决我的问题CGPoint convertedLocation = [[CCDirector sharedDirector]convertToGL:point];
答案 3 :(得分:0)
[startUpOptions setObject:CCScreenOrientationPortrait forKey:CCSetupScreenOrientation];
我刚在函数(BOOL)应用程序中的appdelegate.m文件中添加了上面的代码:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions并且它有效