设置SKVideoNode.isPaused = false会立即开始播放视频

时间:2016-10-18 01:46:15

标签: ios swift sprite-kit swift3

我很难理解如何正确使用SKVideoNode。我制作了一个简单的游戏,玩家必须完成对抗计算机"其动作以预先录制的视频形式呈现。

当游戏开始时,视频应该暂停,所以我打电话给pause()。一旦人类玩家开始他/她的动作,人工玩家的视频就会开始播放。这部分工作正常。

一旦时间到了,通过在isPaused = true子类上设置SKScene暂停游戏场景(让我们称之为GameScene)。

然而,玩家还有机会通过按下按钮重启游戏。当游戏重新开始时,游戏场景是"取消暂停"并且游戏状态重置如下:

gameView.isPaused = false // gameView is an SKView presenting the scene
gameScene.resetGameState()

resetGameState方法只会重置玩家'分数并暂停和回放视频:

public func resetGameState() {
    isGameStarted = false
    isGameStopped = false

    artificialPlayerScoreboard.score = 0
    humanPlayerScoreboard.score = 0

    video.pause()
    videoPlayer.seek(to: CMTime(seconds: 0, preferredTimescale: 1))
}

以下是我制作视频和视频播放器的方法:

    if let videoPath = Bundle.main.path(forResource: "video", ofType: "mp4") {
        videoPlayer = AVPlayer(url: URL(fileURLWithPath: videoPath))
        video = SKVideoNode(avPlayer: videoPlayer)
        video.size = playerScreenSize
        video.anchorPoint = CGPoint(x: 0, y: 0)
        video.position = CGPoint.zero
        video.pause()
        artificialPlayerScreen.addChild(video)
    }

问题是视频在游戏重启后立即开始播放,尽管暂停了。我一直试图找出原因并提出了这个黑客行为:

    gameView.isPaused = false

    // Can't do this immediately because the video will start plyaing.
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1, execute: {
        self.gameScene.resetGameState()
    })

基本上它会做同样的事情,但会在一小段延迟后暂停视频。

这是SKVideoNode的正常行为吗?我用它了吗?

0 个答案:

没有答案