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
и в приведенном выше примере кодового блока установите его видимым после задержки. Надеюсь, это поможет.