2017-04-08 8 views
0

をコーディングすると、何らかの問題が発生しました。 「自動」武器を作ろうとしていますが、セレクタを正しく機能させることができません。 は、ここで私はこれを実行すると、私はセレクタは何も参照しないというエラーが出ますけれども、コードxcodeでセレクタを使用して、スウィフトで

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    for touch in (touches){ 
     let location = touch.location(in: self)func spawnBullets(){ 
       let Bullet = SKSpriteNode(imageNamed: "circle") 
       Bullet.zPosition = -1 
       Bullet.position = CGPoint(x: ship.position.x,y: ship.position.y) 
       Bullet.size = CGSize(width: 30, height: 30) 

       Bullet.physicsBody = SKPhysicsBody(circleOfRadius: 15) 
       Bullet.physicsBody?.categoryBitMask = PhysicsCategory.Bullet 

       Bullet.name = "Bullet" 
       Bullet.physicsBody?.isDynamic = true 
       Bullet.physicsBody?.affectedByGravity = false 
       self.addChild(Bullet) 

       var dx = CGFloat(location.x - base2.position.x) 
       var dy = CGFloat(location.y - base2.position.y) 

       let magnitude = sqrt(dx * dx + dy * dy) 

       dx /= magnitude 
       dy /= magnitude 

       let vector = CGVector(dx: 30.0 * dx, dy: 30.0 * dy) 
       Bullet.physicsBody?.applyImpulse(vector) 


      } 
      spawnBullets() 
      Timer.scheduledTimer(timeInterval: 0.2, target: self, selector:#selector("spawnBullets"),userInfo: nil, repeats: true) 
     } 

" です。誰でも私を助けてくれる? ありがとう

+0

ターゲット/アクションのセレクタは、クラスのトップレベルになければなりません。 'let location = ... 'という行は気違いです。 – vadian

+0

はい、そうです。しかし、コードをコピーしたときのエラーだった –

答えて

0

使用しているスウィフトバージョンを追加していません。 swift 3.xにはマイナーな変更がいくつかあります。あなたが引用符&はこのような何かを削除する必要がありますので、あなたは、このように引用符でセレクタを使用していない迅速3.xでは

selector:#selector(spawnBullets) 

また、これはあなたにいくつかの型の安全性を提供しますあなたのコードを変更する。ランタイムエラーの代わりに、何か間違ったことをすると、コンパイル時エラーが発生します。 https://stackoverflow.com/a/41987413/404659:あなたはまた、タイマーパラメータに対処するための別の別々のFUNC(ここではその詳細を必要

func spawnBullets(_ location: CGPoint) { 
    ... 
} 

:私もあなたの場合にはどうなるのか

は、このようなtouchBeganの外に機能spawnBulletsを移動することです):

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch in (touches) { 

     let location = touch.location(in: self) 
     spawnBullets(location) 
     Timer.scheduledTimer(
      timeInterval: 0.2, 
      target: self, 
      selector:#selector(spawnBullets(sender:)), 
      userInfo: location, 
      repeats: true 
     ) 

    } 
} 

func spawnBullets(sender: Timer) { 
    if let location = sender.userInfo as! CGPoint? { 
     spawnBullets(location) 
    } 
} 

あなたtouchBeganは、このような何かを終わるでしょう210

関連する問題