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)有黑色的开始,然后随着视频播放从黑色淡入