SKScene后台播放视频

Video playing in background of SKScene

我创建了一个具有开始菜单屏幕的游戏。在这个菜单屏幕中,我想要一个视频(我通过 iPhone 6 模拟器录制我玩这个游戏)在这个菜单屏幕的背景中播放。我得到了要播放的视频,但是当视图加载时会发生什么,它会显示菜单,然后它会显示替换菜单本身的视频。

import SpriteKit
import UIKit
import AVFoundation




class MenuScene: SKScene {


var player:AVPlayer!
var VideoSprite:SKVideoNode!





override func didMoveToView(view: SKView) {
let videoURL: NSURL = NSBundle.mainBundle().URLForResource("startTo32", withExtension: "mov")!

    player = AVPlayer(URL: videoURL)
    player?.actionAtItemEnd = .None
    player?.muted = true


    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    playerLayer.zPosition = -100


    playerLayer.frame = view.frame

    player?.play()


    NSNotificationCenter.defaultCenter().addObserver(self,
                                                     selector: #selector(MenuScene.loopVideo),
                                                     name: AVPlayerItemDidPlayToEndTimeNotification,
                                                     object: nil)

    view.layer.addSublayer(playerLayer)


}



func loopVideo() {
    player?.seekToTime(kCMTimeZero)
    player?.play()
}

--------更新--------

Here's the link to see what I'm talking about. 带有文字的屏幕是我试图让视频播放的地方,但它只是让屏幕变白然后播放视频本身。

有任何问题或需要我补充信息,请评论。

谢谢,乔丹。

尝试使用您的 SKVideoNode 而不是向您的视图添加图层。

像这样:

let videoURL: NSURL = NSBundle.mainBundle().URLForResource("startTo32", withExtension: "mov")!
VideoSprite = SKVideoNode(url: videoURL)
self.addChild(VideoSprite)
VideoSprite.play()

SKVideoNode 文档可用 here

这是您为 Swift 4 和 Spritekit 更新的视频播放器:

    import SpriteKit
    import UIKit
    import AVFoundation

    class MenuScene: SKScene {

        var player:AVPlayer!
        var VideoSprite:SKVideoNode!

        override func didMoveToView(view: SKView) {
    let videoURL: NSURL = Bundle.main.url(forResource: "yourvideonamehere", withExtension: "mp4")! as NSURL
    VideoSprite = SKVideoNode(url: videoURL as URL)
    self.addChild(VideoSprite)
    VideoSprite.play()

    player = AVPlayer(url: videoURL as URL)
    player?.actionAtItemEnd = .none
    player?.isMuted = true

    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
    playerLayer.zPosition = 100

    playerLayer.frame = view.frame

    player?.play()   

}

func loopVideo() {
    player?.seek(to: CMTime.zero)
    player?.play()
}
}

希望对您有所帮助。