Новый контроллер представления появляется и затем исчезает за CCScene - PullRequest
1 голос
/ 09 февраля 2011

Я работаю над интеграцией кода Бена Готтлиба Twitter-OAuth-iPhone в мой проект cocos2d 0.99.5, используя это руководство .У меня возникают некоторые трудности с загрузкой контроллера представления.Раньше я никогда не смешивал cocos2d со стандартным интерфейсом Cocoa Touch UI, и я немного не в себе.

Я вызываю следующий код в моем делегате приложения, когда приходит время подключаться к Twitter:

-(void) twitterAccountLogin
{
    UIViewController *controller = nil;
    if (!_engine) {
        _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self];
        _engine.consumerKey = kOAuthConsumerKey;
        _engine.consumerSecret = kOAuthConsumerSecret;

        controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];
    }

    if (controller) {
        [[CCDirector sharedDirector] stopAnimation];
        [viewController presentModalViewController:controller animated:YES];
        [controller release];
        return;
    }
} 

Когда это вызывается, создается твиттер UIViewController, он анимирует на экране, а затем, как только он заканчивает анимацию (т. Е. Достигает верхней части экрана), он исчезает.Текущий CCScene появляется снова, но не реагирует на прикосновения.На симуляторе вместо появления бегущей сцены экран становится черным.На случай, если неясно, viewController - это RootViewController, недавно добавленный в cocos2d в 0.99.5.

Мне кажется, что UIViewController создается, а затем каким-то образом рисуется под бегущей сценой.Но отладка ни к чему не привела.Где я ошибся?

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

После поиска помощи здесь и на форумах cocos2d вот что я в итоге сделал.

-(void)pauseMenuButtonPressed
{    
    if(!paused)
    {
        paused = TRUE;

        [[CCDirector sharedDirector] pause];

        CGSize s = [[CCDirector sharedDirector] winSize];
        pauseLayer = [CCColorLayer layerWithColor: ccc4(150, 150, 150, 125) width: s.width height: s.height];
        pauseLayer.position = CGPointZero;
        [self addChild: pauseLayer z:8];

        CCMenuItem *pauseMenuItemResume =[CCMenuItemImage itemFromNormalImage:@"menuItemResumeSmall.png"
                                                            selectedImage: @"menuItemResumeSmallSelected.png"
                                                                   target:self
                                                                 selector:@selector(pauseMenuResumeSelected)];


        CCMenuItem *pauseMenuItemMainMenu =[CCMenuItemImage itemFromNormalImage:@"menuItemMainMenuSmall.png"
                                                              selectedImage: @"menuItemMainMenuSmallSelected.png"
                                                                     target:self
                                                                   selector:@selector(pauseMenuExitToMainMenuSelected)];

        // Create the pause menu and add the menu items to it
        pauseMenu = [CCMenu menuWithItems:pauseMenuItemResume, pauseMenuItemMainMenu, nil];

        // Arrange the menu items vertically
        [pauseMenu alignItemsVertically];

        // add the menu to the scene
        [self addChild:pauseMenu z:10];

        [hudButtons setIsTouchEnabled:NO];
    }

}

Короче говоря, вместо того, чтобы выдвигать новую сцену для меню паузы, я приостанавливаю все действия в игре, создаю прозрачный слой для наложения на экран и затем отображаю меню поверх этого. Похоже, что это обычный способ решения этой проблемы в cocos2d, по крайней мере, с 0.99.5 (это то, в чем игра в настоящее время работает).

0 голосов
/ 09 февраля 2011

ваш контроллер вида должен выглядеть примерно так:

[[[CCDirector sharedDirector]openGLView] addSubview: viewController.view]; 
[viewController presentModalViewController: controller animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...