Cocos2D iPhone - удаление черного экрана между CCTransition - PullRequest
2 голосов
/ 22 февраля 2012

Я использую cocos2d в своем приложении.Я делаю переход в другую сцену, используя

[[CCDirector sharedDirector] replaceScene: 
 [CCTransitionFadeDown transitionWithDuration:0.5f scene:otherScene]];

В начальной части этой другой сцены создается меню с использованием CCMenu.Это полноэкранное меню.

Моя проблема заключается в следующем: переход происходит на черный экран, а затем появляется меню.Другими словами, переход выполняется до отображения меню, поэтому я вижу уродливый черный экран в течение 0,5 секунд, а затем, после завершения перехода, вижу меню.

Чтобы все было понятнопредставьте себе, что в первой сцене есть изображение лодки, а во второй - изображение автомобиля.То, что у меня есть сейчас, - это переход лодки в чёрный цвет, а затем машина всплывает.Мне нужен переход на лодке к машине.

как мне это сделать?спасибо.

ПРИМЕЧАНИЕ: я нашел этого парня с той же проблемой , но я пробовал это решение без успеха.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Это стоит попробовать, если вы еще не используете его; он удаляет черные мерцания во время загрузки сцены. Запустите следующий метод перед переключением сцен, если это повлияет на вашу проблему (снимите комментарий с этих строк и вызовите метод напрямую):

- (void) removeStartupFlicker
{
    //
    // THIS CODE REMOVES THE STARTUP FLICKER
    //
    // Uncomment the following code if you Application only supports landscape mode
    //

    //  CC_ENABLE_DEFAULT_GL_STATES();
    //  CCDirector *director = [CCDirector sharedDirector];
    //  CGSize size = [director winSize];
    //  CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"];
    //  sprite.position = ccp(size.width/2, size.height/2);
    //  sprite.rotation = -90;
    //  [sprite visit];
    //  [[director openGLView] swapBuffers];
    //  CC_ENABLE_DEFAULT_GL_STATES();

}
1 голос
/ 25 февраля 2012

Я реализовал переход в моем меню (та же проблема), назову его 'fadeInView', добавив черный слой поверх всего в init, с непрозрачностью 255, и в onEnter я запускаю действие, чтобы исчезнуть непрозрачность до 0. следующим образом:

-(id) init {
    self=[super init];
    if(self){
        // do your stuff
        blackShroudLayer_=[CCLayerColor layerWithColor:ccc4(0, 0, 0, 255) width:K_SCREEN_WIDTH height:K_SCREEN_HEIGHT];
        [self addChild:blackShroudLayer_ z:500];
    }  
    return self;
}

-(void) onEnter{

    // need to [super onEnter] first to that we are running 

    [super onEnter];
    id sh = [CCFadeTo actionWithDuration:K_FADE_TIME opacity:0];
    id seq = [CCSequence actions:sh,[CCCallFunc actionWithTarget:self selector:@selector(onUnshroudComplete)], nil];
    [blackShroudLayer_ runAction:seq];
}

-(void) onUnshroudComplete{
     [blackShroudLayer_ removeFromParentAndCleanup:YES];
}

константы и blackShroudLayer_ определены в файле класса .h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...