我使用的是场景中附加了SKVideoNode的AVPlayer。这是该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。
发布于 2014-06-09 09:42:46
this question的回答建议从视频的第一帧制作一张静止图像,并将其作为场景过渡时第一次出现的图像的SKSpriteNode。然后,当过渡结束时,隐藏该海报图像( SKSpriteNode)并播放视频。
现在,我正在做的一个项目中,我正在做的,实际上是利用黑色对我有利。游戏的上下文允许我这样做,但我基本上让我的场景过渡到黑色,视频的开始(在我的例子中是一个mp4)有它的黑色开始,然后随着视频播放从黑色淡入。
https://stackoverflow.com/questions/22643358
复制相似问题