0

我正在使用 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

我可以做些什么不同的事情来让视频立即开始播放,而不是在黑屏的情况下稍微延迟?

4

1 回答 1

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个人,但它仍然对你有用。

CCVideoPlayergithub上查看后,您应该可以将其电影视图设置为不可见,playMovieAtURL并且在上面的代码块示例中,将其设置为延迟后可见。我希望这有帮助。

于 2013-07-26T19:13:51.613 回答