我正在使用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
有什么不同我可以做的事情让视频立即开始播放而不是黑屏的轻微延迟?
答案 0 :(得分:0)
隐藏黑色闪烁的方法是在视频顶部显示第一帧的图像。半秒后(或黑色闪烁持续多长时间)隐藏第一帧,以便视频显示。这是一个例子:
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
但是如果你不能在视频顶部放置精灵,请尝试将视频的alpha设置为最初为0,然后在调用块中将其设置为可见,以便在最初的半秒延迟(或需要任何时间量)之后可以看到视频。这会导致视频在黑色闪烁过后出现。
如果您需要添加一种切换其可见性的方法,请不要害怕修改视频播放器。
在我的应用程序中,我开始MPMoviePlayerViewController
关闭是不可见的,然后我在短暂延迟后将其设置为可见以隐藏闪烁。在我使用视频的cocos2d应用中,我使用[[[CCDirector sharedDirector] view] addSubview:...];
添加了电影播放器,所以我不会亲自使用CCVideoPlayer
,但它仍然适用于你。
在github上查看CCVideoPlayer
之后,您应该能够将其电影视图设置为playMovieAtURL
中不可见,并且在上面的代码块示例中,将其设置为在时间延迟后可见。我希望这会有所帮助。