サウンドが再生されているときにいつも私のアプリがクラッシュする背景を理解できない。ここにサウンドがない場合、アプリはクラッシュしません。 私はSKAction
を演奏しています。 static let
をActions
クラスにあらかじめ読み込んでstatic func
と呼び出して、SKAction
を返します。だから私は完成レベルの音を持っています。それが再生すると、私はホームボタンを押すと、彼らはアプリに戻ってくる。アプリ「スレッド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
}
}
ここに私のクラスでGrid
と呼ばれる、私はレベルが完了したかどうかの条件があります。そこ
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
を示しノードを、持っています「COMPLETED」というテキストが表示されます。私は最後のもののデリゲートであるgrid
インスタンスを、持っているgameNode
で
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)
}
}
、私はシーンに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
}
}
}
は、私は、その後、ホームボタンを押してくださいクラッシュが起こった後、私のゲームに戻ってきてください。
問題が疑われるところにコードを入れてください –
Laura Calinoiu私はコード例で私の質問を更新しました。 –
例外ブレークポイントを設定して、クラッシュの原因となっているコード行を特定します。 – Whirlwind