2013-03-29 3 views
0

Я пытаюсь создать основу для довольно обширного приложения iOS, которое объединит UIKit (и все удобства Interface Builder) с Cocos2D (мощным движком игры). Моя цель - создать весь графический интерфейс приложения с IB, и при необходимости инициализировать представление, инкапсулирующее Cocos2D. Благодаря этому дизайну я надеюсь, что две рамки отделены друг от друга.Реализация Cocos2D с UIKit (IB)

Проект шаблона Cocos2d поставляется с классом AppDelegate, который проводит некоторое время, создавая EAGLView, создавая CCDirector и соединяющий два. Например, рассмотрим метод applicationWillFinishLaunching, реализованный в AppDelegate (ниже). Мой вопрос таков: что я должен комментировать в этой функции, если я не хочу сразу начинать с представления Cocos2D, но вместо этого создан MainMenuViewController?

CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds] 
           pixelFormat:kEAGLColorFormatRGB565 
           depthFormat:0 
         preserveBackbuffer:NO 
           sharegroup:nil 
          multiSampling:NO 
          numberOfSamples:0]; 

director_ = (CCDirectorIOS*) [CCDirector sharedDirector]; 
director_.wantsFullScreenLayout = YES; 

// Display FSP and SPF 
[director_ setDisplayStats:YES]; 

// set FPS at 60 
[director_ setAnimationInterval:1.0/60]; 

// attach the openglView to the director 
[director_ setView:glView]; 

// 2D projection 
[director_ setProjection:kCCDirectorProjection2D]; 
// [director setProjection:kCCDirectorProjection3D]; 

// 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"); 

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images 
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 
// You can change this setting at any time. 
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 

CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils]; 
[sharedFileUtils setEnableFallbackSuffixes:NO];    // Default: NO. No fallback suffixes are going to be used 
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];  // Default on iPhone RetinaDisplay is "-hd" 
[sharedFileUtils setiPadSuffix:@"-ipad"];     // Default on iPad is "ipad" 
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; // Default on iPad RetinaDisplay is "-ipadhd" 

// Assume that PVR images have premultiplied alpha 
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; 

// Create a Navigation Controller with the Director 
navController_ = [[MyNavigationController alloc] initWithRootViewController:director_]; 
navController_.navigationBarHidden = YES; 

// for rotation and other messages 
[director_ setDelegate:navController_]; 

// set the Navigation Controller as the root view controller 
[window_ setRootViewController:navController_]; 

// make main window visible 
[window_ makeKeyAndVisible]; 

Моя немедленная мысль в лом glView и все связанное с ним. Тем не менее, я немного неясен в работе по настройке MyNavController, настройке делегата директора и rootViewController.

ответ

0

Это возможно, и я делал это раньше, следуя обучающую here

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

+0

Спасибо, Боб. Это был один из первых уроков, за которыми я последовал. Тем не менее, я очень, очень неясен в целом в отношении «rootViewController» в этом примере. Можете ли вы это объяснить? – Clev3r

0

Я сделал это в приложении. То, что я сделал, это создать .xib, называемый CocosViewController, который отображается всякий раз, когда пользователь запускает книгу истории (книги с рассказами отображаются в cocos2d, а остальная часть приложения - UIKit). Этот вид не является чем-то особенным, а просто контроллером вида с одним представлением внутри него. Я просто добавляю директора кокосов в UINavigationController и представляю этот контроллер. При настройке вида GL я сопоставляю кадр с размером контроллера вида.

Вот пример кода, который можно использовать для настройки cocos2d. Я заканчиваю сцену, если она уже запущена, или вы получите неприятную ошибку opengl, если сцена уже была запущена. Хотя это не должно происходить, если вы закончите работу режиссера при разгрузке представления.



    @interface CocosViewController() 
    { 
     UINavigationController* navController_; 
     CCDirectorIOS* director_; 
    } 

    @end 


    @implementation CocosViewController 

    -(void) setupCocos2d 
    { 
     director_ = (CCDirectorIOS*)[CCDirector sharedDirector]; 

     if([director_ runningScene] != nil) 
      [[CCDirector sharedDirector] end]; 

     CCGLView *glView = [CCGLView viewWithFrame:[self.view bounds] 
             pixelFormat:kEAGLColorFormatRGB565 
             depthFormat:0 
           preserveBackbuffer:NO 
             sharegroup:nil 
            multiSampling:NO 
            numberOfSamples:0]; 

     director_.wantsFullScreenLayout = YES; 
     [director_ setDisplayStats:YES]; 
     [director_ setAnimationInterval:1.0/60]; 
     [director_ setView:glView]; 

     [director_ setProjection:kCCDirectorProjection2D]; 

     if(![director_ enableRetinaDisplay:YES]) 
      CCLOG(@"Retina Display Not supported"); 

     [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 

     CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils]; 
     [sharedFileUtils setEnableFallbackSuffixes:NO]; 
     [sharedFileUtils setiPadSuffix:@"-ipad"]; 
     [sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"]; 
     [sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; 

     [CCTexture2D PVRImagesHavePremultipliedAlpha:NO]; 

     navController_ = [[UINavigationController alloc] initWithRootViewController:director_]; 
     navController_.navigationBarHidden = YES; 

     [director_ setDelegate:navController_]; 
     [self presentViewController:navController_ animated:NO completion:nil]; 
    } 

Я называю это in viewDidLoad. Во многом это происходит в делегате приложения cocos2d в проектах шаблонов. Не забудьте закончить работу режиссера [CCDirector sharedDirector]], когда представление выгружается, как только вы закончите с ним.

Дайте мне знать, если у вас есть еще вопросы. Надеюсь, это помогло.

Смежные вопросы