2017-03-23 2 views
1

Ich möchte die touchBegan-Funktionalität in meinem UIView verwenden und ich sollte SKScene-Methoden auslösen. Alles wird fast funktionieren, erwarte die Tatsache, dass sich die Startposition meines SKNode von der Note in der UIView unterscheidet. Ich lese darüber hier: Confusing reversed touch event in Swift, aber sie geben keine Lösung, wie man eine UIView-Touch-Geste in eine SKScene-Touch-Geste übersetzt, die der Touch-Position entspricht. Das funktioniert:Standort in UIView in SKScene übersetzen

Aber ich lege eine UIView darüber, und diese Funktion funktioniert nicht mehr. Wenn ich es zu diesem ändern:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first { 
    var currentPoint = touch.location(in: newUIView) 
    executeSpawningStar(startPosition: currentPoint) 
    } 
} 

Das Laichen sieht sehr seltsam aus. Die Koordinationen des Laichsterns sind nicht korrekt. Wie kann ich die korrekten Koordinaten von den UIView- zu den SpriteKit-Einstellungen übertragen, um sie an die tatsächliche Position der Touch-Geste anzupassen?

Antwort

2

Gute Nachrichten! SKView verfügt über Methoden zur Konvertierung von und nach SKScene-Koordinaten.

func convert(_ point: CGPoint, from scene: SKScene) -> CGPoint 
func convert(_ point: CGPoint, to scene: SKScene) -> CGPoint 

So könnte man so etwas wie:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first { 
     var currentPoint = touch.location(in: newUIView) 
     currentPoint = gameScene.convertPoint(fromView: currentPoint) 
     executeSpawningStar(startPosition: currentPoint) 
    } 
} 

https://developer.apple.com/reference/spritekit/skview/1520328-convert https://developer.apple.com/reference/spritekit/skview/1519847-convert

+1

Danke, aber wie diese Funktion hinzufügen? Swift sagt mir, dass ich ein {} damit machen soll. Wenn ich nur die Zeile currentPoint = convert (currentPoint, zu: gameScene) schreibe sagt es die Verwendung von unaufgelösten Bezeichnern umwandeln. Edit: Ich habe es zur Arbeit gebracht –