2

我正在使用AVPlayer一个SKVideoNode附加到场景的。那是唯一的节点SKScene。我正在播放该视频与一组加载了各种SKSpriteNode节点的其他场景混合在一起。

我想预先滚动,以便视频在过渡AVPlayer期间开始播放之前(或)它变得可见。SKScene然而,如果没有中间的黑色闪光,我似乎无法这样做。

就像包含视频的场景消失一样,我将其重置(我将 AVPlayer 对象填充到SKVideoNode的用户字典中)。这似乎有效:

SKVideoNode *v = ...;
AVPlayer *player = [[v userData] objectForKey:@"AVPlayer"];
if ([player isKindOfClass:[AVPlayer class]]) {
    [player seekToTime:kCMTimeZero];

当包含视频的场景即将出现时,我这样做:

SKTransition *trans = [SKTransition flipHorizontalWithDuration:1.0];
[self.skView presentScene:theScene transition:trans];
[self performSelector:@selector(startVideoInScene:)
           withObject:theScene
           afterDelay:0.2];

然后...

- (BOOL)startVideoInScene:(SKScene *)theScene
{
    for (SKNode *n in [theScene children])
        if ([n isKindOfClass:[SKVideoNode class]]) {
            SKVideoNode *v = (SKVideoNode *)n;
            AVPlayer *player = [[v userData] objectForKey:@"AVPlayer"];
            if ([player isKindOfClass:[AVPlayer class]]) {
                [v play];
                return YES;
            }
        }
    return NO;
}

如果不从视频前的短暂黑色开始,这将不起作用。

有人成功了吗?

我有一个令人难以忘怀的怀疑,a 上的所有内容SKScene在其过渡期间都被暂停,并且没有办法绕过它。好吧,除了过渡出当前场景的所有节点,保留当前场景,并SKVideoNode在其上过渡一个新节点。

4

1 回答 1

1

这个问题的答案建议从视频的第一帧制作静止图像,并将SKSpriteNode其用作场景转换时首先出现的图像。然后,当过渡结束时,隐藏该海报图像(SKSpriteNode)并播放您的视频。

现在,我在一个项目中正在做的事情,实际上是利用黑色来发挥我的优势。游戏的上下文允许我这样做,但我基本上让我的场景过渡到黑色,视频的开头(在我的例子中是 mp4)有它的黑色开始,然后随着视频播放从黑色淡入。

于 2014-06-09T01:42:45.833 回答