2016-03-26 16 views
0

スプライトを押すと何かが起きるようにしようとしていますが、タッチが正しく認識されるようにするために問題があります。SwiftでSKSpriteNodeがタッチされたときにコードをアクティブにできません

class GameScene: SKScene { 

var optDiceSprite = SKSpriteNode() 

override func didMoveToView(view: SKView) { 
    createOptSprite() 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    for touch in touches { 
     let location = touch.locationInNode(self) 
     let node = nodeAtPoint(location) 

     print("NAME OF NODE: \(node.name)") 

     if (node == optDiceSprite) { 
      print("WHY U NO WORKY!") 
     } 
    } 
} 

func createOptSprite() { 
     optDiceSprite = SKSpriteNode(imageNamed: "sound_off") 
     optDiceSprite.userInteractionEnabled = true 
     optDiceSprite.position = CGPoint(x: CGRectGetMaxX(self.frame) - 30, y: CGRectGetMinY(self.frame) + 30) 
     optDiceSprite.setScale(0.5) 
     addChild(optDiceSprite) 
} 

printステートメントを開始していません。このコードがtouchesBeganメソッドで実行される前に、スプライトをグローバルに宣言し、作成して配置します。

私がしようとしているのは、ユーザーがサウンドアイコンスプライトに触れるたびに、サウンドエフェクトのオン/オフを切り替えることです。

ご協力いただきましてありがとうございます。

答えて

2

することは、私はこれを試してみました

class GameScene: SKScene { 

     var optDiceSprite = SKSpriteNode() 

     override func didMoveToView(view: SKView) { 
     createOptSprite() 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     for touch in touches { 
      let location = touch.locationInNode(self) 
      let node = nodeAtPoint(location) 

      print("NAME OF NODE: \(node.name)") 

      if (node == optDiceSprite) { 
       print("WHY U NO WORKY!") 
       } 
      } 
    } 

    func createOptSprite() { 
    optDiceSprite = SKSpriteNode(imageNamed: "sound_off") 
    optDiceSprite.setScale(0.5) 
    optDiceSprite.position = CGPoint(x: CGRectGetMaxX(self.frame) - 30, y: CGRectGetMinY(self.frame) + 30) 
    addChild(optDiceSprite) 
    } 
+0

代わりにこれを試してみて、nodeAtLocationが未解決であるように見え、これは有効な方法ですか?代わりにnodeAtPoint(location)を使用できることがわかりましたが、まだこの作業が表示されていません。私は、forループのサイドにブレークポイントを設定すると、スプライトはif文の外側のコメントを起動しないことに気付きました。思考? – tbaldw02

+0

申し訳ありませんが、私の一部はnodeAtPointでなければなりません。それは挑戦的に動作します – crashoverride777

+0

コードを追加しました。私が与えたコード変更はすばらしかったですが、私はもっと大きな問題があると思います。 if文は、私が作成した特定のスプライトに当たったときに発砲しません。私がバックグラウンドを打つと、しかしゼロの値で発射されます。スプライト自体に何か問題がありますか? – tbaldw02

関連する問題