Ich arbeite mit Swift und SpriteKit.Wie erkennt man genau, wenn ein SKShapeNode berührt wird?
Ich habe folgende Situation:
Hier ist jeder der "Dreiecke" ist ein SKShapenode. Mein Problem ist, dass ich erkennen möchte, wenn jemand den Bildschirm berührt, welches Dreieck berührt wird. Ich nehme an, dass die Hitbox aller dieser Dreiecke Rechtecke sind, so dass meine Funktion mir alle berührten Hitboxen zurückgibt, während ich nur wissen will, welche tatsächlich berührt wird.
Gibt es eine Möglichkeit, eine Hitbox zu erhalten, die genau der Form entspricht, anstatt einem Rechteck?
Hier ist mein aktueller Code:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
let touch = touches.first
let touchPosition = touch!.locationInNode(self)
let touchedNodes = self.nodesAtPoint(touchPosition)
print(touchedNodes) //this should return only one "triangle" named node
for touchedNode in touchedNodes
{
if let name = touchedNode.name
{
if name == "triangle"
{
let triangle = touchedNode as! SKShapeNode
// stuff here
}
}
}
}
Es ist genau das, was ich wollte! Und alle Knoten, die "Dreieck" genannt werden, sind SKShapeNodes, könnten wir nach 'enumerateChildNodesWithName' hinzufügen, lassen Sie shapenode = node as! SKShapeNode', und entferne 'if node is SKShapeNode' und' if p = (node as! SKShapeNode) .path' nur, wenn 'if CGPathContainsPoint (shapenode.path, nil, touchPosition, false)' '? – Drakalex
Es ist nicht sicher, enumerateChildNodesWithName arbeitet mit generischen SKNode;), werfen Sie einen Blick auf den Apple-Leitfaden: https://developer.apple.com/reference/spritekit/sknode/1483024-enumeratechildnodeswithname –