Ich beginne zu lernen, wie Swift2 auf iOS mit SpriteKit funktioniert und ich kann nicht erkennen, ob ich einen sichtbaren Teil meines Sprites berührte.Erkennen der Berührung innerhalb der Begrenzungsbox (Alphamaske) von Sprite mit SpriteKit
Ich kann feststellen, welcher Knoten wurde wie folgt berührt:
let touchedNode = self.nodeAtPoint(location)
Aber die Berührung auf dem Sprite erkennen. Ich möchte die Berührung nur auf dem "nicht transparenten" Teil des Sprites erkennen.
Ich versuchte, einen PhysicsBody mit einem Alpha-Maske Begrenzungsrahmen Erstellen und Testen, ob der Begrenzungsrahmen des Knotens ich den Ort der Berührung wie diese enthält, ausgewählt:
sprite.physicsBody = SKPhysicsBody.init(texture: sprite.texture!, size: sprite.size)
sprite.physicsBody?.affectedByGravity = false
if (touchedNode.containsPoint(location)){
Aber es half nicht. Wenn ich in einen transparenten Teil meines Sprites klicke, wird das Ereignis immer noch ausgelöst.
Die Dokumentation sagt "Ein neuer Physikkörper wird erstellt, der alle Texel in der Textur enthält, die einen Alpha-Wert ungleich Null haben.", Sollte es nicht funktionieren?
Danke für Ihre Zeit.
PS: Ich habe auch versucht, auf meiner Alpha-Schwelle großzügiger zu sein, aber das hat auch nicht funktioniert (falls meine Transparenz nicht perfekt war).
UPDATE:
ein wenig mehr Details hinzuzufügen, ich einen Level-Editor bin Gebäude. Das bedeutet, dass ich viele Knoten erstellen werde, je nachdem, was der Benutzer wählt, und ich muss diese Knoten auswählen/verschieben/rotieren können. Ich verwende tatsächlich SKSpriteNodes, da meine PNG-Bilder automatisch in xcassette hinzugefügt werden. Ich entschied mich für die Alpha Mask-Box von PhysicsBody, da dieser Wert im Szeneneditor (Xcode) angezeigt wird, wenn Sie einen Knoten auswählen, und wenn ausgewählt, markiert die Alpha-Maske genau den Teil meines Sprites, den ich haben möchte entdecke eine Berührung im Inneren.
Wenn ich die falschen Ideen/Techniken verwende, bitte sag es mir. Dies ist möglich, da ich erst Swift und SpriteKit benutze.
UPDATE 2
ich die physicsWord abgefragt (wie empfohlen) das Recht physicsBody zu bekommen und bekam den Namen des angeschlossenen Knoten wie folgt aus:
let body = self.physicsWorld.bodyAtPoint(location)
print(body?.node?.name)
Aber das ist immer noch Druck der Name des Knotens, auch wenn ich außerhalb der Bounding Box berühre, was für mich keinen Sinn ergibt.
Danke trotzdem für Ihre Hilfe.
Haben Sie einen guten Weg gefunden, dies zu tun? – Confused