我的应用程序崩溃,因为我的精灵套件游戏中未完成的声音
无法理解为什么我的应用程序崩溃总是在播放声音的时候出现背景。 如果这里没有声音的应用程序不会崩溃。 我有一个发挥声音的SKAction
。 我预先加载这个歌曲与static let
在Actions
类,并调用static func
返回SKAction
的声音。 所以我有完成水平的声音。 当它播放,我打回家button,他们回到应用程序。 有应用程序崩溃消息“线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xff8e9abc)”。 有没有人知道这里发生了什么?
这是我的结构称为Actions
:
public struct Actions { static let completionSound = SKAction.playSoundFileNamed("CompletionSound.mp3", waitForCompletion: false) static func playCompletionSound() -> SKAction { return completionSound } }
在我的class级叫做Grid
,我有条件,不pipe级别是否完成:
class Grid { var delegate: GridDelegate? private var completed: Bool = false ... ... private func completeLevel() { if completed { let waitAction = SKAction.wait(forDuration: 1.5) let blockAction = SKAction.run { let groupAction = self.settings.sound ? SKAction.group([Actions.playGridSwishSound(), Actions.removeGridAction()]) : Actions.removeGridAction() self.gridNode.run(groupAction, completion: { self.gridNode.removeAllChildren() self.delegate?.completionLevel() }) } let seq = SKAction.sequence([waitAction, blockAction]) run(groupAction) } }
在那里我有一个节点,它显示SKLabelNode
与“完成”文本。
class CompletionNode: SKNode { private let completionLabel = SKLabelNode(fontNamed: MainFont) init(settings: Settings) { self.settings = settings super.init() isUserInteractionEnabled = false completionLabel.text = Titles.CompletedTitle completionLabel.fontSize = 46.0 completionLabel.fontColor = GoldenColor completionLabel.centering() completionLabel.position = CGPoint(x: 0.0, y: 0.0) completionLabel.xScale = 0.0 completionLabel.yScale = 0.0 completionLabel.alpha = 0.0 addChild(completionLabel) } func animate(completion: @escaping () -> ()) { let waitAction = Actions.waitAction(duration: 0.2) let scaleAction = SKAction.scale(to: 1.0, duration: 0.4) scaleAction.timingMode = .easeInEaseOut let fadeInAction = Actions.fadeInAction(duration: 0.4) fadeInAction.timingMode = .easeIn let groupAction = SKAction.group([scaleAction, fadeInAction]) let llBlock = SKAction.run { self.completionLabel.run(groupAction) } let seq = SKAction.sequence([waitAction, llBlock]) run(seq, completion: completion) } }
在gameNode
,我有grid
实例,它是最后一个的代表,我将completionNode添加到场景中:
class GameScene: SKNode { var gird: Grid? let hudNode = HUDNode() let completionNode = CompletionNode() var completionOn = false ... init() { super.init() grid = Grid() grid!.delegate = self grid!.position = CGPoint(x: 0.0, y: 0.0) addChild(grid!) hudNode.position = CGPoint(x: 0.0, y: MainSize.height * 0.44) hudNode.zPosition = 40.0 hudNode.delegate = self addChild(hudNode) completionNode.alpha = 0.0 completionNode.position = CGPoint(x: 0.0, y: 0.0) completionNode.zPosition = 60.0 addChild(completionNode) } internal func completeLevel() { addCompletionScene() } private func addCompletionNode() { run(Actions.playCompletionSound()) completionNode.alpha = 1.0 completionNode.animate { self.completionOn = true self.hudNode.isUserInteractionEnabled = true } } }
当我到达关卡末尾时,按回家button,然后回到我的游戏,发生什么事情发生。
看起来playSoundFileNamed在保存audio会话时遇到问题,而您的应用程序/游戏在前景和背景模式之间转换。
根据您的实施情况,在应用程序在中断后恢复后,您会收到无法预知的行为,从静音播放到加载失败的声音资产,直至崩溃。
以下是一个讨论类似问题的主题: SKAction playSoundFileNamed在接到两个连续的电话后不起作用
我build议停止使用playSoundFileNamed操作,并使用AVAudioPlayer来播放声音文件。 它需要更多的努力来configuration它,但它已经存在了很长时间,并且完美地工作。
- iOS 7只有应用程序在启动时崩溃
- 自SDK 8更新以来,iOS 8 UIApplicationMain发生崩溃
- Swift 3项目中的Unity实现:应用程序启动崩溃 – MetadataCache :: Initialize()
- 崩溃__pthread_kill
- dequeueReusableSupplementaryViewOfKind崩溃在ios 7.1 – 索引0超出界限为空数组
- xcode gm ios 8 gm swift今天扩展崩溃在模拟器和设备:库未加载:@ rpath / libswiftCore.dylib
- Swift应用程序在模拟器上打开,但不在设备上
- 这个应用程序开发和工作正常在iOS 5.0下,但崩溃在iOS 4.3下
- iOS只有在不通过XCode运行时才会崩溃。 Concidence?