我有以下函数生成正方形并将它们添加到正方形数组中。这会无限期地添加新方块,直到函数停止。正方形数组在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()
函数来检测何时点击数组中的特定方块,然后访问该方块的属性。我无法弄清楚如何确定触摸哪个方块。我该怎么做呢?
答案 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
}
}
}
}