2015-02-12 3 views
0

Ориентация показана в «интерфейсах ориентации интерфейса» в файле info.plist, однако при повороте все равно не вращается.Игра не вращается PortraitUpsideDown

Ищу сделать портрет & Portraitupsidedown

Это из RootViewController.m

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

     // 
     // There are 2 ways to support auto-rotation: 
     // - The OpenGL/cocos2d way 
     //  - Faster, but doesn't rotate the UIKit objects 
     // - The ViewController way 
     // - A bit slower, but the UiKit objects are placed in the right place 
     // 

    #if GAME_AUTOROTATION==kGameAutorotationNone 
     // 
     // EAGLView won't be autorotated. 
     // Since this method should return YES in at least 1 orientation, 
     // we return YES only in the Portrait orientation 
     // 

    #elif GAME_AUTOROTATION==kGameAutorotationCCDirector 
     // 
     // EAGLView will be rotated by cocos2d 
     // 
     // Sample: Autorotate only in landscape mode 
     // 
     if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 
      [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeRight]; 
     } else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
      [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeLeft]; 
     } 

     // Since this method should return YES in at least 1 orientation, 
     // we return YES only in the Portrait orientation 
     return (interfaceOrientation == UIInterfaceOrientationPortrait); 

    #elif GAME_AUTOROTATION == kGameAutorotationUIViewController 
     // 
     // EAGLView will be rotated by the UIViewController 
     // 
     // Sample: Autorotate only in landscpe mode 
     // 
     // return YES for the supported orientations 

     return (UIInterfaceOrientationIsPortrait(interfaceOrientation)); 

    #else 
    #error Unknown value in GAME_AUTOROTATION 

    #endif // GAME_AUTOROTATION 


     // Shold not happen 
     return NO; 
    } 

    // 
    // This callback only will be called when GAME_AUTOROTATION == kGameAutorotationUIViewController 
    // 
    #if GAME_AUTOROTATION == kGameAutorotationUIViewController 
    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
    { 
     // 
     // Assuming that the main window has the size of the screen 
     // BUG: This won't work if the EAGLView is not fullscreen 
     /// 
     CGRect screenRect = [[UIScreen mainScreen] bounds]; 
     CGRect rect = CGRectZero; 

     if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
      rect = screenRect; 


     else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
      rect.size = CGSizeMake(screenRect.size.height, screenRect.size.width); 

     CCDirector *director = [CCDirector sharedDirector]; 
     EAGLView *glView = [director openGLView]; 
     float contentScaleFactor = [director contentScaleFactor]; 

     if(contentScaleFactor != 1) { 
      rect.size.width *= contentScaleFactor; 
      rect.size.height *= contentScaleFactor; 
     } 
     glView.frame = rect; 
    } 
    #endif // GAME_AUTOROTATION == kGameAutorotationUIViewController 


From the AppDelegate.m file I also have; 

    // Init the window 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // Try to use CADisplayLink director 
    // if it fails (SDK < 3.1) use the default director 
    if(! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink]) 
     [CCDirector setDirectorType:kCCDirectorTypeDefault]; 

    CCDirector *director = [CCDirector sharedDirector]; 

    // Init the View Controller 
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; 
    viewController.wantsFullScreenLayout = YES; 

    // 
    // Create the EAGLView manually 
    // 1. Create a RGB565 format. Alternative: RGBA8 
    // 2. depth format of 0 bit. Use 16 or 24 bit for 3d effects, like CCPageTurnTransition 
    // 
    // 
    EAGLView *glView = [EAGLView viewWithFrame:[window bounds] 
            pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8 
            depthFormat:0      // GL_DEPTH_COMPONENT16_OES 
         ]; 

    // attach the openglView to the director 
    [director setOpenGLView:glView]; 

// // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices 
    if(! [director enableRetinaDisplay:YES]) 
     CCLOG(@"Retina Display Not supported"); 

    // 
    // VERY IMPORTANT: 
    // If the rotation is going to be controlled by a UIViewController 
    // then the device orientation should be "Portrait". 
    // 
    // IMPORTANT: 
    // By default, this template only supports Landscape orientations. 
    // Edit the RootViewController.m file to edit the supported orientations. 
    // 

    [director setDeviceOrientation:kCCDeviceOrientationPortrait]; 
    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:NO]; 


    // make the OpenGLView a child of the view controller 
    [viewController setView:glView]; 

    // make the View Controller a child of the main window 
    [window addSubview: viewController.view]; 

    [window makeKeyAndVisible]; 

У меня есть другие игры, с помощью cocos2d, что мне удалось получить, чтобы повернуть и я перепроверены настройки с этими, они одинаковые, поэтому я не могу понять, почему он не вращается?

EDIT -

Это может быть красноречивым сообщение об этом ...

Application windows are expected to have a root view controller at the end of application launch 
+0

Вы пробовали отслеживать Это? Установите точку останова и что происходит. – Neeku

+0

Я не был уверен, где поставить точку останова? – Hypergater

ответ

0

Попробуйте добавить RootViewController

[window setRootViewController: viewController]; 
+0

Hi @ gururaj.T, который работает лучше, теперь он вращается, но все идет за пределы экрана, т. Е. Вращается, и появляется черный экран (так что все выходит из экрана). – Hypergater

+0

Хорошим решением является перенос вашего кода на Cocos2d 2.x или 3.x – Guru

0

В контроллере rootview закомментируйте

CCDirector *director = [CCDirector sharedDirector]; 
EAGLView *glView = [director openGLView]; 
float contentScaleFactor = [director contentScaleFactor]; 

if(contentScaleFactor != 1) { 
    rect.size.width *= contentScaleFactor; 
    rect.size.height *= contentScaleFactor; 
} 
glView.frame = rect; 
Смежные вопросы