タイトルは、**の行に致命的なエラーが表示されています。しかし、それはどのようにすることができますか分からない?それは多くの演劇の後にのみ起こります。たぶん、それは配列からサウンドファイルを取得するため?また、didBeginContact関数の青い月に1回も発生します。アンラップ中のオプションなし値
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
その場合は、コードを整理するために文字列に切り替えることをお勧めします。ガードステートメントは次のようになります: 'path(); path(); path {}; ) ");パスがnil(クラッシュを防ぐ)でなければ、あなたのコードは続くでしょう。そして、もしそれがnilになったら、ファイルとタイプが何であるかを知ることができます。 – TheBrownCoder