如何停止或暂停 SKAction 播放音乐? - 斯威夫特
Posted
技术标签:
【中文标题】如何停止或暂停 SKAction 播放音乐? - 斯威夫特【英文标题】:How can I stop or pause an SKAction playing music? - Swift 【发布时间】:2015-01-10 19:02:09 【问题描述】:当按下暂停按钮时,我需要知道如何停止或暂停正在播放我的游戏主题曲的 SKAction。我使用的代码是为了在按下按钮但它不起作用时删除操作。此代码在我的 GameScene 类中。
func startGameMusic()
runAction (SKAction.playSoundFileNamed("theme.mp3", waitForCompletion: true), withKey: "themeSong")
func stopGameMusic()
self.removeActionForKey ("themeSong")
在 GameViewController 类中按下暂停按钮时调用 stopGameMusic 函数。
@IBAction func didPause(sender: UIButton)
if self.scene.paused == false
self.scene.stopTicking()
self.scene.paused = true
self.scene.stopGameMusic()
或:
@IBAction func didPause(sender: UIButton)
if self.scene.paused == false
self.scene.stopTicking()
self.scene.paused = true
self.scene.removeActionForKey("themeSong")
【问题讨论】:
如何知道didPause()
是否被调用?它与按钮的动作有关吗?添加 NSLog() 或调试器断点以确认调用了 didPause()
。
是的,暂停被调用是因为屏幕上的项目会随着每个刻度移动,并且当您按下调用函数 stopTicking() 的按钮时它们会停止移动
有什么帮助吗?我不确定为什么该功能没有被删除
在您的startGameMusic
中您指定的waitForCompletion:true
。也许你不能暂停,因为播放器正在播放直到完成 - 没有中断。试试false
,看看能不能暂停。
不,不幸的是那没用
【参考方案1】:
我自己刚刚完成了暂停按钮的编码;看起来像 Swiftris 演示。我是从视图控制器而不是场景中完成的。播放一次的声音被编码在视图控制器中,比如游戏结束,那么为什么不把它们都放在一个地方呢?就音频而言,我添加了这几行代码:
import AVFoundation
然后在类函数里面...
var backgroundAudio = AVPlayer(URL:NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("theme",ofType:"mp3")!))
var gameStatus:Bool = true
然后在我的 IBAction 函数内部链接到一个暂停按钮...
if(gameStatus == true
scene.stopTicking()
backgroundAudio.pause()
gameStatus = false
else
scene.startTicking()
backgroundAudio.play()
gameStatus = true
解释:AVFoundation 为您提供了大量的音频/视觉工具 gameStatus 变量让我知道它是否暂停。真 = 开 如果它打开并按下暂停,则场景退出滴答声,音频暂停,并且 gameStatus 关闭。 如果游戏状态为假,该按钮将激活场景计时器并从中断处拾取音频。然后在游戏恢复时将 gameStatus 设置为 true。尚未添加主题曲的永久运行功能。
【讨论】:
以上是关于如何停止或暂停 SKAction 播放音乐? - 斯威夫特的主要内容,如果未能解决你的问题,请参考以下文章