我很难理解如何正确使用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
的正常行为吗?我用它了吗?