2017-07-11 6 views
0
func bombTowerTurnShoot() { 
let zombieGreen = self.childNode(withName: "zombie") as! SKSpriteNode 
    self.enumerateChildNodes(withName: "bomb tower") { 
     node, stop in 
      if let bombTower = node as? SKSpriteNode { 
      let angle = atan2((zombieGreen.position.x) - bombTower.position.x, (zombieGreen.position.y) - bombTower.position.y) 
      let actionTurn = SKAction.rotate(toAngle: -(angle - CGFloat(Double.pi/2)), duration: 0.2) 
      bombTower.run(actionTurn) 
       } 
      } 
     } 

私の問題は、アングルラインにあります。シーンにzombieGreensがないときに関数を呼び出すと、スレッド1の問題が発生します。ゾンビが存在しないときにコードを変更するにはどうすればよいですか?Swift SpriteKitアンラッピングとラッピング

答えて

2

エラーが二行目ですでに起こるべきシーンにはZombiGreensがない場合:

let zombieGreen = self.childNode(withName: "zombie") as! SKSpriteNode 

私はあなたのコードの多くを変更することなく、最も簡単な解決策が許可すればを使用することだと思いますあなたが爆弾塔のためにしたのと同じように。

func bombTowerTurnShoot() { 
      if let zombieGreen = self.childNode(withName: "zombie") as? SKSpriteNode{ 
       self.enumerateChildNodes(withName: "bomb tower") { 
        node, stop in 
        if let bombTower = node as? SKSpriteNode { 
         let angle = atan2((zombieGreen.position.x) - bombTower.position.x, (zombieGreen.position.y) - bombTower.position.y) 
         let actionTurn = SKAction.rotate(toAngle: -(angle - CGFloat(Double.pi/2)), duration: 0.2) 
         bombTower.run(actionTurn) 
        } 
       } 
      } 
     } 

しかし、処理するロジックがもっとあるときは、コードを確認することをお勧めします。それは良い方法かもしれませんが、これはうまくいくはずです:)

+0

私たちは**の代わりに**を使用します。 !その間にアンラップを強制するでしょうか?アンラップする前に値が何か他のものでないかどうかをチェックします。もしそれが無ければ、それは展開されず、クラッシュしません。この値に依存するコードの後に​​何かがある場合を除きます。 If letステートメントを使用するには、使用する必要がありますか? (私はほぼ100%確信している、私が間違っている場合は私を修正する) –

関連する問題