2016-03-30 30 views
0

Bu isteğe bağlı değerin ne olduğunu veya neden bu hatayı aldığımı anlayamıyorum. Puan tamsayıcımı kontrol ettim ve değerinin, düşmanla temas kurmasını sağlayana kadar 0 olduğunu beyan ettim. Simülatörde sayaç, ilk 4 veya 5 düşmanını sayar ve ardından çöker.ölümcül hata: beklenmedik şekilde bulunamadı fizikte İsteğe bağlı bir değer kopyalarken iletişim kurulacak

var score = Int?() 
var scoreLabel = UILabel() 
override func didMoveToView(view: SKView) { 

    scoreLabel.text = "\(score)" 
    scoreLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 
    20)) 
    scoreLabel.textColor = UIColor.blackColor() 

    score = nil 
    if score == nil { 
     score = 0 
     scoreLabel.text = "\(score!)" 
} 
func didBeginContact(contact: SKPhysicsContact) { 

    let firstBody : SKPhysicsBody = contact.bodyA 
    let secondBody : SKPhysicsBody = contact.bodyB 

    if ((firstBody.categoryBitMask == PhysicsCategory.bullet) && 
(secondBody.categoryBitMask == PhysicsCategory.enemy) || 
     (firstBody.categoryBitMask == PhysicsCategory.enemy) && 
(secondBody.categoryBitMask == PhysicsCategory.bullet)) { 
//i get the error next line    
collisionWithBullet((firstBody.node as! SKSpriteNode), 
bullet: (secondBody.node as! SKSpriteNode)) 
    } 
} 

func collisionWithBullet(enemy: SKSpriteNode, bullet: SKSpriteNode){ 

    score? += 1 
    scoreLabel.text = "\(score!)" 
    enemy.removeFromParent() 
    bullet.removeFromParent() 

} 
+0

Amaç c olurdu '[düşman removeFromParent]' sonra zinciri giriş Başlangıç ​​ –

+0

. ÇarpışmaWithBullet aranıyor mu? Eğer öyleyse, düşman nedir ve çağrıldığında mermi nedir? –

+0

Neden "skoru" isteğe bağlı olarak bildiriyorsunuz? Eğer başlangıç ​​değeri 0 ise yine de isteğe bağlı olmayan değişken olarak varsayılandır 'var puan = 0' – vadian

cevap

2

yapmak dışı isteğe bağlı olarak skor ve varsayılan olarak 0 puan seti

var score = 0 
var scoreLabel = UILabel() 

override func didMoveToView(view: SKView) { 

scoreLabel.text = "\(score)" 
scoreLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 
20)) 
scoreLabel.textColor = UIColor.blackColor() 

// skor nil ve nil kontrol atama ???

//score = nil 
//if score == nil { 
// score = 0 
// scoreLabel.text = "\(score!)" 
//} 

score = 0 
scoreLabel.text = "\(score!)" 

func didBeginContact(contact: SKPhysicsContact) { 

let firstBody : SKPhysicsBody = contact.bodyA 
let secondBody : SKPhysicsBody = contact.bodyB 

if ((firstBody.categoryBitMask == PhysicsCategory.bullet) && 
(secondBody.categoryBitMask == PhysicsCategory.enemy) || 
    (firstBody.categoryBitMask == PhysicsCategory.enemy) && 
(secondBody.categoryBitMask == PhysicsCategory.bullet)) { 
//i get the error next line    
collisionWithBullet((firstBody.node as! SKSpriteNode), 
bullet: (secondBody.node as! SKSpriteNode)) 
} 
} 

func collisionWithBullet(enemy: SKSpriteNode, bullet: SKSpriteNode){ 

score += 1 // score is no more optional. default score is 0 
scoreLabel.text = "\(score!)" 
enemy.removeFromParent() 
bullet.removeFromParent() 

} 
+0

yardım için teşekkürler, tamsayıyı bir değişkene değiştirdim ama hala hatayı alıyorum ve artık uygulayamıyorum! skor yapmak. ve görüntülemek için hareket halinde varsayılan puanı 0'a ayarlayın. –

+0

da skoru silindi = nil eğer skor == nil {puan = 0 scoreLabel.text = "(skor!)"} Arkasındaki teorim, bir nil değeri yaratmaktı. nil bir değere sahip olduğu için çökmez –