基本的に、最初のシーンで音楽を再生すると、すべて正常に動作します。シーン 2 に移行すると、音楽が自動的に停止します。しかし、その後、トランジションを元に戻すと、音楽が 0.5 秒間始まり、理由もなく途切れてしまいます。さらに奇妙なことに、物理デバイスをスリープモードにしてからロックを解除した場合にのみ、完全に継続します。
実際のプロジェクトで発生している問題を解決するために、過度に単純化したコードを作成しました。これは私の最初のシーンです。起動時に音楽を再生し、タッチするとシーン 2 に移行します。
import SpriteKit
class GameScene: SKScene
{
override func didMoveToView(view: SKView)
{
let backgroundMusic = SKAudioNode(fileNamed: "WhatIsLove.mp3")
backgroundMusic.autoplayLooped = true
backgroundMusic.positional = false
addChild(backgroundMusic)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
let transition = SKTransition.revealWithDirection(.Down, duration: 1.0)
let nextScene = SceneTwo(size: scene!.size)
nextScene.scaleMode = .AspectFill
nextScene.backgroundColor = UIColor.blueColor()
scene?.view?.presentScene(nextScene, transition: transition)
}
}
そして、シーン 2 では、音楽が移行する前に自動的に停止します。ここでは、タッチするとシーン 1 に戻る以外に何もありません。ここでは、音楽を再び開始したいと考えています (ただし、0.5 秒後に再生が停止します)。
import SpriteKit
class SceneTwo: SKScene
{
override func didMoveToView(view: SKView)
{
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
let transition = SKTransition.revealWithDirection(.Down, duration: 1.0)
let nextScene = GameScene(size: scene!.size)
nextScene.scaleMode = .AspectFill
nextScene.backgroundColor = UIColor.greenColor()
scene?.view?.presentScene(nextScene, transition: transition)
}
}
なぜこれが起こっているのか分かりません。変数を宣言して実装するために、SKAudioNode と他の方法との組み合わせをいくつか試しました。私は autoplayLooped & positional オプションを使わず、ほぼすべてを試しました。最初のシーンに戻ったときに、音楽が再び適切に再生されるようにします。