我使用的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;
}
如果没有在视频播放之前使用黑色短暂持续时间,则无效。
有人在这方面取得了成功吗?
我有一种令人难以置信的怀疑,SKScene
上的所有内容在转换期间都被暂停,并且没有办法绕过它。好吧,除了转换出当前场景的所有节点,保留当前场景,并将新的SKVideoNode
转换到它上面。
答案 0 :(得分:1)
来自this question的答案建议从视频的第一帧制作静止图像,并使其成为SKSpriteNode
,用作首次显示为场景转换的图像。然后,当转换结束时,隐藏该海报图片(SKSpriteNode
)并播放您的视频。
现在,我现在正在进行的项目中,实际上正在使用黑色对我有利。游戏的上下文允许我这样做,但我基本上让我的场景转换为黑色,视频的开头(在我的情况下是mp4)有黑色开始,然后在视频播放时从黑色淡入。