2013-05-01 89 views
0

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

有什麼不同,我可以做的有聲視頻立即開始播放,而不是稍有延遲的黑屏?

+0

延遲是正常的,uimovieplayercontroller有回調告訴你它什麼時候準備好了,但它們可能不會被ccvideo實現... – LearnCocos2D 2013-05-01 20:34:12

+0

那麼我該如何解決延遲問題。因爲那看起來不太好。 – Stephen 2013-05-01 20:42:05

+0

搜索MPMoviePlayerLoadStateDidChangeNotification ...此通知告訴您MPMoviePlayerViewController何時準備播放視頻,此時您將其隱藏標誌更改爲NO以顯示該視頻。還有更多,但我相信有幾個例子在網上浮動。 – LearnCocos2D 2013-05-02 00:48:12

回答

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,但如果你不能把一個精靈在在視頻之上,嘗試設置視頻的阿爾法是最初爲0,然後在呼叫塊將其設置爲可見,以便在最初的半秒延遲(或需要的任何時間量)之後可以看到視頻正在播放。這會導致視頻在黑色閃爍通過後出現。

如果您需要添加切換其可見性的方式,請不要害怕修改視頻播放器。

在我的應用程序中,我開始將MPMoviePlayerViewController關閉爲不可見,然後在短暫延遲後將其設置爲可見,以隱藏該閃爍。在我使用視頻的cocos2d應用程序中,我使用[[[CCDirector sharedDirector] view] addSubview:...];添加了電影播放器​​,因此我個人不使用CCVideoPlayer,但它仍然適用於您。

在github上查看CCVideoPlayer之後,您應該能夠將其電影視圖設置爲在playMovieAtURL和上面的代碼塊示例中不可見,並在延遲時間後將其設置爲可見。我希望這有幫助。