2

をシーンに付けて使用してAVPlayerいます。SKVideoNodeそれはそのための唯一のノードですSKSceneSKSpriteNodeさまざまなノードがロードされた一連の他のシーンと混ざり合ったビデオを再生しています。

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

4

1 に答える 1

1

この質問の答えは、ビデオの最初のフレームから静止画像を作成し、SKSpriteNodeそれをシーンの遷移として最初に表示される画像として使用することを提案しています。次に、トランジションが終了したら、そのポスター画像 ( SKSpriteNode) を非表示にして、ビデオを再生します。

現在進行中のプロジェクトで私が行っていることは、実際に黒を有利に利用することです。ゲームのコンテキストではこれを行うことができますが、基本的にはシーンを黒に移行させます。ビデオの開始点 (私の場合は mp4) は黒く開始し、ビデオが再生されると黒からフェードインします。

于 2014-06-09T01:42:45.833 に答える