제목에 **으로 줄에 치명적인 오류가 있음을 알리는 메시지가 표시됩니다. 그래도 그것이 어떻게 될 수 있는지 모르겠지만? 그것은 많은 연극 이후에만 발생합니다. 어쩌면 그 배열에서 사운드 파일을 받기 때문에? 또한 didBeginContact 함수에서 파란 달에 매번 발생합니다.언 래핑 중 선택 값 값
var soundFiles = ["gary1", "gary2","gary3","gary4","gary5","gary6","gary7","gary8","gary9","gary10","gary11","gary12","gary13","gary14",]
var audioPlayer: AVAudioPlayer = AVAudioPlayer()
func setupAudioPlayer(file: NSString, type: NSString){
let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
**let url = NSURL.fileURLWithPath(path!)**
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
}
catch {
print("Player not available")
}
}
func playRandomSound() {
let range: UInt32 = UInt32(soundFiles.count)
let number = Int(arc4random_uniform(range))
self.setupAudioPlayer(soundFiles[number], type: "mp3")
self.audioPlayer.play()
}
}
FUNC의 didBeginContact (연락처 : SKPhysicsContact)이 코드는 가끔 있지만 다른 작업 때 {
// 1
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
// 2
if ((firstBody.categoryBitMask & PhysicsCategory.Monster != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.Projectile != 0)) {
*** projectileDidCollideWithMonster(firstBody.node as! SKSpriteNode, monster: secondBody.node as! SKSpriteNode)**
}
가끔씩 만 작동하는 경우 안전 조치를 추가 한 다음 명령문을 인쇄하여 충돌 상황을 정확하게 확인할 것을 권장합니다. 예를 들어,'setupAudioPlayer()'함수에'guard let path = ...'를 추가하십시오; 그런 다음 다른 곳에서 매개 변수가 무엇인지 인쇄하십시오. 또한, Swift의 String 대신 NSString을 매개 변수로 사용하는 이유가 있습니까? – TheBrownCoder
아니요 이유가 없습니다. 가드에서 경로 제안을 할 수있게 해줄 수 있을까요? – BARIIIIIIICODE
이 경우 문자열을 코드로 정리하는 것이 좋습니다. guard 명령문은 다음과 같이됩니다 :'path (path) : path (path) : path (path) ';) "); return}'그렇다면 path가 nil (크래쉬 방지)이 아닌 경우에만 코드가 실행되고, nil이 아닌 경우 파일과 유형을 확인할 수 있습니다. – TheBrownCoder