看看SKShapeNode是否触及?:如何识别节点?

时间:2014-12-08 01:19:39

标签: ios swift sprite-kit

我正在Swift Xcode 6中做一个有趣的小项目。函数thecircle()由didMoveToView()中的计时器以一定的速率调用。我的问题是如何检测显示器上的多个圆形节点中的任何一个是否被轻敲?我目前没有看到在此功能中访问单个节点的方法。

func thecircle() {
    let circlenode = SKShapeNode(circleOfRadius: 25)
    circlenode.strokeColor = UIColor.whiteColor()
    circlenode.fillColor = UIColor.redColor()

    let initialx = CGFloat(20) 
    let initialy = CGFloat(1015)

    let initialposition = CGPoint(x: initialx, y: initialy)
    circlenode.position = initialposition

    self.addChild(circlenode)

    let action1 = SKAction.moveTo(CGPoint(x: initialx, y: -20), duration: NSTimeInterval(5)) 
    let action2 = SKAction.removeFromParent()
    circlenode.runAction(SKAction.sequence([action1, action2]))
}

1 个答案:

答案 0 :(得分:1)

这有很多问题。

  1. 您不应该在游戏中创建任何循环计时器。场景附带update方法,该方法在游戏的每一帧都被调用。大多数情况下,您将检查场景中的变化。

  2. 您无法从circlenode方法之外访问thecircle。如果您想从其他地方访问,则需要将circlenode设置为场景的属性。

    例如:

    class GameScene: BaseScene {
        let circlenode = SKShapeNode(circleOfRadius: 25)
    
  3. 您需要使用方法touchesBegan。它应该与您的spritekit项目一起提供。您可以通过以下方式检测节点的触摸:

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    
       for touch: AnyObject in touches {
    
           // detect touch in the scene
          let location = touch.locationInNode(self)
    
          // check if circlenode has been touched
          if self.circlenode.containsPoint(location) {
                // your code here
          }
       }
    }