检测阵列中SKNode上的触摸

时间:2015-04-03 07:14:18

标签: ios sprite-kit touches sknode

我有以下函数生成正方形并将它们添加到正方形数组中。这会无限期地添加新方块,直到函数停止。正方形数组在SKScene中声明如此:var rsArray = [RedSquare]()

func spawnRedSquares() {
    if !self.gameOver {
        let rs = RedSquare()
        var rsSpawnRange = self.frame.size.width/2
        rs.position = CGPointMake(rsSpawnRange, CGRectGetMaxY(self.frame) + rs.sprite.size.height * 2)
        rs.zPosition = 3
        self.addChild(rs)
        self.rsArray.append(rs)

        let spawn = SKAction.runBlock(self.spawnRedSquares)
        let delay = SKAction.waitForDuration(NSTimeInterval(timeBetweenRedSquares))
        let spawnThenDelay = SKAction.sequence([delay, spawn])
        self.runAction(spawnThenDelay)
    }
}

我尝试使用touchesBegan()函数来检测何时点击数组中的特定方块,然后访问该方块的属性。我无法弄清楚如何确定触摸哪个方块。我该怎么做呢?

3 个答案:

答案 0 :(得分:0)

给每个产生唯一名称的方块,并在touchesBegan中检查该名称。您可以使用计数器并执行

rs.name = "square\(counter++)"

在touchesBegan中,您可以检索触摸节点的名称,并根据阵列中节点的名称进行检查。

答案 1 :(得分:0)

首先,你必须给rs node一个名字。例如

rs.name = "RedSquare"

然后,您可以使用nodeAtPoint函数在特定接触点查找节点。如果节点是RedSquare,则可以对其进行修改。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch in touches {

        let touchPoint = touch.locationInNode(self)
        let node = self.nodeAtPoint(touchPoint)

        if node.name == "RedSquare" {
            // Modify node
        }

    }
}

答案 2 :(得分:0)

我能够通过实验来回答我自己的问题,并决定我会发布答案以防其他人遇到类似的问题。我在touchesBegan()函数中需要的代码如下:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)
        let rsCurrent = self.nodeAtPoint(location)
        for RedSquare in rsArray {
            let rsBody = RedSquare.sprite.physicsBody
                if rsBody == rsCurrent.physicsBody?  {
                    //Action when RedSquare is touched
            }
        }
    }
}