swift - 删除 SKVideoNode 不会停止来自视频节点的音频
问题描述
我在我的 GameScene 中添加了一个 SKVideoNode。当我尝试删除视频时,视频图像消失,但音频继续播放。我试图在删除之前停止并暂停视频,但无论如何音频都会继续播放。
var introVideoIsPlaying = false
var introVideo: SKVideoNode!
func playIntroVideo() {
introVideoIsPlaying = true
if let videoURL = Bundle.main.url(forResource: "video", withExtension: "mp4") {
introVideo = SKVideoNode(url: videoURL)
introVideo.position = CGPoint(x: frame.midX, y: frame.midY)
introVideo.size = self.frame.size
self.addChild(introVideo)
introVideo.play()
}
}
然后我删除了 touchesBegan 中的视频 -
if introVideoIsPlaying == true {
introVideo.removeFromParent()
}
我会错过什么?有没有办法独立停止 SKVideoNode 中的音频?
解决方案
最好将 AVPlayer 与 SKVideoNose 结合使用,如下所示:
(您将有更多选项来控制视频)
var player: AVPlayer?
player = AVPlayer(url: videoURL)
let videoNode = SKVideoNode(avPlayer: player!)
然后,您可以使用在节点更改时触发的函数 didUpdate。您可以在节点看不见时暂停视频,如下所示
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
if node.isHidden == true {
print("Node is out of view")
self.player?.pause()
}
}
推荐阅读
- ios - 数组 .contains() 快速期待抛出的布尔值?
- r - R中春季缺少月份和蓝色阴影的ggplot数据?
- javascript - React.js TypeError:无法读取 null 的属性“地图”
- flutter - 我在 Flutter 中为列表项设置了动画左右滚动效果,但整个列表立即更改?
- javascript - 高性能 Javascript 固定滚动
- python - 当我导入依赖项时,Dash 应用程序停止
- javascript - 与 Messenger 共享的 fb 使用 php 和 javscript 出现“未找到附件”错误
- python - Pickle 没有将数据保存到具有格式化字符串名称的文件中
- c - 扫描值的长度
- python - Python - 两个值之间的模数