【发布时间】:2015-07-12 22:09:57
【问题描述】:
我首先声明了两个 SKSpriteNode,handle 和 Blade,并将 handle 添加为 self 的子节点,并将 Blade 添加为 handle 的子节点
var handle = SKSpriteNode(imageNamed: "Handle.png")
var blade = SKSpriteNode(imageNamed: "Blade.png")
override func didMoveToView(view: SKView) {
handle.position = CGPointMake(self.size.width / 2, self.size.height / 14)
blade.position = CGPointMake(0, 124)
self.addChild(Handle)
Handle.addChild(Blade)
}
当我点击手柄时,它会打印到控制台“手柄被点击”,但是当我点击刀片时,它也会打印“手柄被点击”。它清楚地认识到刀片是手柄的孩子,但是我怎样才能让它在我点击刀片时打印“刀片被点击”?
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
if (Handle.containsPoint(location)){
NSLog("Handle was clicked")
}
else if (Blade.containsPoint(location)){
NSLog("Blade was clicked")
}
}
}
【问题讨论】:
-
您可以通过为每个节点分配唯一的名称属性并在 touchesBegan 方法中检查节点的名称来区分。
-
但这正是我所做的,但没有奏效。我将其中一个命名为手柄,另一个命名为刀片,当我点击刀片时,它以为我在点击手柄
-
你好@Lahav。你是对的,因为它是一个孩子,你不能使用
containsPoint,因为它基本上是使用精灵的框架,并查看场景坐标系中的点是否与它的一个孩子中的点匹配,但是你想要孩子们的孩子。永远不要害怕帮助即将到来!我本人或 Sprite Kit 联盟成员之一将很快提供帮助。请待命。
标签: swift sprite-kit touchesbegan