をシーンに付けて使用して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
上に新しいノードをトランジションすることは別として。