2016-12-08 4 views
0

장면에 대한 최종 게임에는 SKT 전환이 메인 메뉴로 돌아갑니다. 마지막 장면에서 노래를 재생할 수 있지만 노래를 내 메인 메뉴로 계속 보내고 싶습니다.신속한 게임에서 내 장면 2 개를 통해 재생되는 노래를 추가하는 방법

다음은 현재 가지고있는 코드의 복사본입니다.

import Foundation 
import SpriteKit 
import AVFoundation 


class SceneThree: SKScene { 

    var game = SKSpriteNode() 

var new: AVAudioPlayer? 

override func didMove(to view: SKView) { 

    self.backgroundColor = SKColor.black 

    playSound() 

} 

func playSound() { 
    let url = Bundle.main.url(forResource: "new", withExtension: "caf")! 

    do { 
     new = try AVAudioPlayer(contentsOf: url) 
     guard let new = new else { return } 

     new.prepareToPlay() 
     new.play() 
    } catch let error { 
     print(error.localizedDescription) 
    } 
} 



override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let gameScene = GameScene(fileNamed: "GameScene") 
    gameScene?.scaleMode = .aspectFill 
    self.view?.presentScene(gameScene!, transition: SKTransition.fade(withDuration: 4.5)) 



} 
+0

하는 데 도움이 아마 당신 NSNotificationCenter를 통해 그것을하려고해야합니까? –

+0

임 신속하게 정말 새로운! 이 코드에 추가 할 수 있습니까? 또는이 코드를 다시 실행해야합니다. @BohdanSavych – niX

+0

AVAudioPlayer가 장면에 속해 있기 때문에 장면이 전환되어 소멸되면 오디오 플레이어도 정리됩니다. 오디오 컨트롤러를 뷰 컨트롤러의 한 레벨 위로 올리십시오. –

답변

0

장면을 변경하면 이전 장면이 파괴되어 AVPlayer 속성이 포함됩니다.

음악을 피하기 위해 도우미 클래스를 만들 수 있습니다.

class MusicManager { 

    static let shared = MusicManager() 

    var audioPlayer = AVAudioPlayer() 


    private init() { } // private singleton init 


    func setup() { 
     do { 
      audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!)) 
      audioPlayer.prepareToPlay() 

     } catch { 
      print (error) 
     } 
    } 


    func play() { 
     audioPlayer.play() 
    } 

    func stop() { 
     audioPlayer.stop() 
     audioPlayer.currentTime = 0 // I usually reset the song when I stop it. To pause it create another method and call the pause() method on the audioPlayer. 
     audioPlayer.prepareToPlay() 
    } 
} 

프로젝트가 바로 설정 방법을 프로젝트의 어떤 곳에서보다

MusicManager.shared.setup() 

전화를 발사

당신은

MusicManager.shared.play() 

이 음악을 재생할 말할 수 있습니다.

중지 그냥 GitHub의에

https://github.com/crashoverride777/SwiftyMusic

희망을 내 도우미를 체크 아웃 여러 트랙보다 기능이 풍부한 예를 들어, 정지 방법을

MusicManager.shared.stop() 

전화보다이

+0

안녕하세요 @ crashoverride777 자세한 답변을 보내 주셔서 감사합니다! 나는 프로그래밍에 초보적이다. 이것이 맞으면 나를 바로 잡으십시오. 내 프로젝트에 새로운 신속한 파일을 추가하고 MusicManager 클래스 및 모든 코드 세그먼트에있는 모든 것을 추가했습니다. 그런 다음 음악을 재생하기 원하는 장면에서 didMove (보기 ...)의 MusicManager.shared.setup()을 및 MusicManager.shared.play()에 추가 했습니까? – niX

+0

나는 app delegate didFinishLaunching 메서드 나 게임 뷰 컨트롤러 viewDidLoad에 setup 메소드를 추가하여 앱이 시작하자마자 호출되도록합니다. 장면에서 재생할 때 재생 방법을 호출하기 만하면됩니다. 계속 게시 됨 – crashoverride777