swift - 为什么我的声音让我的游戏在 Swift Spritekit 中滞后?

标签 swift audio avfoundation

当我的英雄节点收集硬币并且我的游戏中有这个小问题时,我有这个声音效果。当收集硬币时有声音时,它不像其他游戏那样流畅。我究竟做错了什么?这是我的声音代码:

  class GameScene: SKScene, SKPhysicsContactDelegate {

   var coinSound =  NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("coin", ofType: "wav")!)
   var coinAudioPlayer = AVAudioPlayer()

   override func didMoveToView(view: SKView) {

   coinAudioPlayer = AVAudioPlayer(contentsOfURL: coinSound, error: nil)
   coinAudioPlayer.pause()
   }

   if firstBody.categoryBitMask == HeroCategory && secondBody.categoryBitMask == CoinCategory {

   coinAudioPlayer.prepareToPlay()
   coinAudioPlayer.play()
   coinAudioPlayer.currentTime = NSTimeInterval(1.0)
    }

最佳答案

使用SKAction.playSoundFileNamed .当您提前创建一个 SKAction 实例时,它会执行所有必要的准备以在游戏过程中无延迟地执行操作(在本例中为播放声音)。要运行 Action (播放声音),请在节点上调用 runAction - 这可以是任何节点,甚至是场景本身。

因为为了声音目的使用哪个节点并不重要,请使用最方便的那个。例如,如果您只是播放声音,您可以在场景中调用 runAction。但是,如果您的声音是一个 Action 组或序列的一部分,例如,动画 Sprite ,您可以将声音 Action 作为该序列的一部分,并在您正在动画的 Sprite 上播放。

参见 SpriteKit Programming Guide有关操作的更多信息。


不相关的 Swift 提示:对于不会更改的引用,请使用 let 而不是 var。它可以帮助您避免以后引入错误,并且还可能帮助编译器优化您的代码。

关于swift - 为什么我的声音让我的游戏在 Swift Spritekit 中滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29585638/

相关文章:

javascript - 录制视频和音频并上传到服务器

swift - 使用相机应用程序拍摄方形照片

ios - 由于 GestureRecognizer,CollectionView 单元格需要两次点击

ios - 搜索核心数据以获取最接近的值

iphone - iOS SDK - iPhone 音频插孔如何与连接的电缆交互?

ios - -Swift.h 头文件中没有名为 'AVCaptureVideoDataOutputSampleBufferDelegate' 的类型或协议(protocol)

swift - 使用带有 Swift2 的相机的黑色背景图像

ios - 如何在集合单元格中重绘动态大小的 UIView

swift - 我的 Sprite 不执行我告诉它的操作?

javascript - 使音频与getdocumenttag一起播放