Sprite durch Berühren mit begrenzter Rotationsgeschwindigkeit drehen
Ich versuche, meinen SpriteNode über die Fingerkuppe drehen zu lassen.
So weit ich kann es tun, aber was ich will, ist, dass mein Knoten eine "Rotationsgeschwindigkeit" hat. Also berechne ich die Länge des Winkels und stelle dann ein anderes Timing ein, um mit ihm zu drehen (wenn der Bogen lang ist, wird es Zeit brauchen ...).
Hier ist mein Code:
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
_isTouched = true
for touch in touches {
let location:CGVector = touch.locationInNode(self) - miner.position
miner.weaponRotation = location.angle() - CGFloat(M_PI_2)
}
}
var wantedRotation: CGFloat {
get { return _wantedRotation }
set(rotation) {
if rotation > CGFloat(M_PI) || rotation < -CGFloat(M_PI) {
_wantedRotation = CGFloat(M_PI) + rotation % CGFloat(M_PI)
}
else {
_wantedRotation = rotation
}
removeActionForKey("rotation")
let arc: CGFloat = CGFloat(abs(_wantedRotation - zRotation))
let shortestArc: CGFloat = min(arc, CGFloat(M_PI * 2.0) - arc)
runAction(SKAction.rotateToAngle(_wantedRotation, duration: NSTimeInterval(shortestArc / CGFloat(M_PI) * rotationSpeed), shortestUnitArc: true), withKey: "rotation")
}
}
Das Hauptproblem ist, dass das Hinzufügen mehrererSKAction
zum Knoten blockiert die Bewegung.
Ich würde gerne wissen, was die Lösung sein könnte? Wenn möglich mit SKAction, da ich es vermeiden möchte, jedes Bild zu aktualisieren, um die Bewegung zu berechnen (aber wenn es die einzige Lösung ist ...)
HINWEIS NACH ANTWORT
ls ich Antworten erhielt, las ich noch einmal die SpriteKit-Dokumentation und fanddiese klare Notiz :
Wenn Sie keine Aktionen verwenden sollten
Obwohl Aktionen effizient sind, sind ihre Erstellung und Ausführung mit Kosten verbunden. Wenn Sie in jedem Bild der Animation Änderungen an den Eigenschaften eines Knotens vornehmen und diese Änderungen in jedem Bild neu berechnet werden müssen, ist es besser, die Änderungen direkt am Knoten vorzunehmen und keine Aktionen zu verwenden. Weitere Informationen darüber, wo Sie dies in Ihrem Spiel tun könnten, finden Sie unter Erweiterte Szenenverarbeitung.