CCVideoPlayer имеет задержку?

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

[[CCDirector sharedDirector] replaceScene:[MainMenu scene]];

И тогда вот как я играю фильм в главном меню:

+(CCScene *) scene
{
    CCScene *scene = [CCScene node];
    MainMenu *layer = [MainMenu node];
    [scene addChild: layer];

    return scene;
}

- (id) init {

    if( (self=[super init])) {

                [CCVideoPlayer setDelegate: self];

    }

    return self;
}

- (void)onEnter{

        [self playVideo];
    }

    [super onEnter];
}

-(void)onExit{

    [super onExit];
}

- (void) playVideo {

    [CCVideoPlayer playMovieWithFile: @"MenuBuild.m4v"];
}

- (void) movieStartsPlaying {

    [[CCDirector sharedDirector] stopAnimation];

}

- (void) moviePlaybackFinished
{

    [[CCDirector sharedDirector] startAnimation];

 }

#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
// Updates orientation of CCVideoPlayer. Called from SharedSources/RootViewController.m
- (void) updateOrientationWithOrientation: (UIDeviceOrientation) newOrientation
{
    [CCVideoPlayer updateOrientationWithOrientation:newOrientation ];
}
#endif

- (void) dealloc {

    [CCVideoPlayer setDelegate: nil];

    [super dealloc];
}
@end

Есть ли что-то другое, что я мог бы сделать, чтобы видео сразу начало воспроизводиться вместо небольшой задержки с черным экраном?

1 ответ

Чтобы скрыть черное мерцание, вы можете показать изображение первого кадра поверх видео. Через полсекунды (или как долго длится черное мерцание) скройте первый кадр, чтобы показать видео. Вот пример:

CCSprite* first_frame = [CCSprite spriteWithFile:@"first_frame.png"];
[self addChild:first_frame];

id delay_action = [CCDelayTime actionWithDuration:0.5f];

id call_action = [CCCallBlock actionWithBlock:^
{
    first_frame.visible = FALSE;
}];

[first_frame runAction:[CCSequence actions:delay_action, call_action, nil]];

Я не использовал CCVideoPlayer но если вы не можете поместить спрайт поверх видео, попробуйте установить альфа видео изначально равной 0, а затем в блоке вызова установите его в видимое состояние, чтобы видео можно было воспроизвести после начальной половины секунды. задержка (или сколько угодно времени). Это привело бы к появлению видео после того, как черное мерцание прошло.

Не бойтесь модифицировать видео плеер, если вам нужно добавить способ переключать его видимость.

В моих приложениях я запускаю MPMoviePlayerViewController отключив как невидимый, затем я установил его видимым после небольшой задержки, чтобы скрыть это мерцание. В моих приложениях cocos2d, использующих видео, я добавляю проигрыватель фильмов, используя [[[CCDirector sharedDirector] view] addSubview:...]; так что я не использую CCVideoPlayer лично, но это все равно должно работать для вас.

Посмотрев на CCVideoPlayer на GitHub, вы должны иметь возможность установить его просмотр фильма невидимым в playMovieAtURL и в приведенном выше примере кодового блока установите его видимым после задержки. Надеюсь, это поможет.

Другие вопросы по тегам