我正在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]))
}
答案 0 :(得分:1)
这有很多问题。
您不应该在游戏中创建任何循环计时器。场景附带update
方法,该方法在游戏的每一帧都被调用。大多数情况下,您将检查场景中的变化。
您无法从circlenode
方法之外访问thecircle
。如果您想从其他地方访问,则需要将circlenode设置为场景的属性。
例如:
class GameScene: BaseScene {
let circlenode = SKShapeNode(circleOfRadius: 25)
您需要使用方法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
}
}
}