Sprite kit 在场景转换之前,使用AVPlayer预滚SKVideoNode?

Sprite kit 在场景转换之前,使用AVPlayer预滚SKVideoNode?,sprite-kit,skscene,skvideonode,Sprite Kit,Skscene,Skvideonode,我正在使用一个AVPlayer,并将SKVideoNode附加到场景中。这是该场景的唯一节点。我正在播放一段视频,其中混合了一组加载了各种SKSpriteNode节点的其他场景 我想预先滚动AVPlayer,以便视频在SKScene转换期间可见之前(或之后)开始播放。然而,如果没有一道黑色的闪光,我似乎无法做到这一点 就在包含视频的场景消失时,我重置了它(我将AVPlayer对象填充到SKVideoNode的用户字典中)。这似乎有效: SKVideoNode *v = ...; AVPlayer

我正在使用一个
AVPlayer
,并将
SKVideoNode
附加到场景中。这是该场景的唯一节点。我正在播放一段视频,其中混合了一组加载了各种
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)有黑色的开始,然后随着视频播放从黑色淡入