我正在使用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
在其上过渡一个新节点。