2016-10-24 5 views
0

스위프트 3에 코딩 된 내 게임에서 배경 음악을 갖고 싶습니다. 많은 자습서와 예제 코드를 시도했지만 Swift 3 코드에서 작동하는 구현을 찾을 수 없습니다. 내가 찾을 수있는 가장 좋은 예제 코드는 이것이다 : 나는 "리소스"라는 별도의 폴더에 음악 파일을 넣어 가지고Swift 3의 배경 음악

lazy var backgroundMusic: AVAudioPlayer? = { 
    guard let url = Bundle.main.url(forResource: "Music Title", withExtension: "mp3") else { 
     return nil 
    } 

    do { 
     let player = try AVAudioPlayer(contentsOf: url) 
     player.numberOfLoops = -1 
     return player 
    } catch { 
     return nil 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    backgroundMusic?.play() 
} 

. 네가 나를 도울 수 있으면 나는 매우 행복 할 것이다!


파일 이름의 공백을 밑줄로 변경했지만 문제가 계속 발생합니다. 내가 엑스 코드에서 번역 힌트를 수행 할 때 그런데 나는이 코드를 얻을 : lazy var backgroundMusic에 중단 점을 설정하고 코드에 스테핑 후

lazy var backgroundMusic: AVAudioPlayer? = { 
    guard let url = Bundle.main.url(forResource: "Mining by Moonlight", withExtension: "mp3") else { 
     return nil 
    } 

    do { 
     let player = try AVAudioPlayer(contentsOf: url) 
     player.numberOfLoops = -1 
     return player 
    } catch { 
     return nil 
    } 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    backgroundMusic?.play() 
} 

을, 나는 디버거에서 다음과 같은 결과를 얻을 :

0x1029097d8 < +760> : movq 0x69a9 (% rip), % rcx; . (_98A37426C9C75C234890E1E239802C1D에 backgroundMusic.storage) TabTab.ViewController 오프셋 필드를 직접 : Swift.Optional>

+1

그리고 코드를 단계별로 디버거를 사용하면 .....을 발견 했습니까? –

+0

캐시 된 오류를 무시하지 마십시오. 적어도 로그인하십시오. –

+0

함수 항목에서 디버거를 사용할 때 다음과 같이 나타납니다. –

답변

1

신속한 3

class MusicHelper { 
static let sharedHelper = MusicHelper() 
var audioPlayer: AVAudioPlayer? 
func playBackgroundMusic() { 
    let aSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "mario", ofType: "mp3")!) 

    print(aSound) 
    do { 
     audioPlayer = try AVAudioPlayer(contentsOf:aSound as URL) 
     audioPlayer!.numberOfLoops = -1 
     audioPlayer!.prepareToPlay() 
     audioPlayer!.play() 
    } catch { 
     print("Cannot play the file") 
    } 
} 

}

으로하고있는 viewDidLoad에 MusicHelper 이것을 추가. sharedHelper.playBackgroundMusic()