sprite套件-在场景转换之前,使用AVPlayer预滚动和SKVideoNode



我使用AVPlayerSKVideoNode附加到一个场景。这是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;
}

如果在视频开始前没有短时间的黑色,则无法工作。

有人成功了吗?

我有一个挥之不去的怀疑,SKScene上的所有内容在过渡期间都被暂停了,而且没有办法。嗯,除了过渡出当前场景的所有节点,保持当前场景,并将一个新的SKVideoNode过渡到它上面。

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

现在,我正在做的一个项目,实际上是利用黑色对我有利。游戏的背景允许我这么做,但我基本上让场景过渡到黑色,视频的开始(在我的例子中是mp4)有一个黑色的开始,然后随着视频播放从黑色淡入。

最新更新