我開始通過聲明兩個SKSpriteNodes,把手和刀片,並添加手柄自我的孩子,和刀片的柄的子如何使touch.locationInNode()識別節點與其子節點之間的區別?
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節點名稱區分。 – sangony
但這正是我所做的,並沒有奏效。我命名其中一個手柄,另一個刀片,當我點擊刀片時它以爲我點擊了手柄 – Lahav
你好@Lahav。你是對的,因爲它是一個孩子,你不能使用'containsPoint',因爲它基本上是使用精靈的框架,並查看場景座標系中的點是否與其中一個子節點相匹配,但是你想要孩子的孩子。永遠不要害怕幫助!無論是我自己還是Sprite Kit Alliance成員之一,我們都將盡快提供幫助。 PLZ支持。 –