Ich habe eine SKNode
, die aus 4 SKSpriteNodes
besteht, die eine quadratische Form bilden (ich hoffe, ich schreibe es richtig). Jede Seite des Quadrats hat eine andere Farbe, und ich versuche, das ganze Quadrat zu drehen, ohne seine Position zu verändern. Die Art, wie ich versuche, führt immer dazu, dass sie ihre Position ändert, wenn sie mit der Rotation beginnt. Dies ist, wie ich es angesprochen:Wie man einen SKNode dreht, ohne seine Position zu ändern?
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
var shape = SKNode()
override func didMoveToView(view: SKView) {
self.addChild(shape)
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0)
self.physicsWorld.contactDelegate = self
let greenLine = SKSpriteNode(imageNamed: "Green")
greenLine.position = CGPoint(x: size.width/2, y: size.height/2.5)
let yellowLine = SKSpriteNode(imageNamed: "Yellow")
yellowLine.position = CGPoint(x: greenLine.position.x - greenLine.frame.width/2, y: frame.size.height/2)
let redLine = SKSpriteNode(imageNamed: "Red")
redLine.position = CGPoint(x: greenLine.position.x + greenLine.frame.width/2, y: frame.size.height/2)
let blueLine = SKSpriteNode(imageNamed: "Blue")
blueLine.position = CGPoint(x: frame.size.width/2, y: redLine.position.y + redLine.frame.height/2.3)
shape.addChild(greenLine)
shape.addChild(yellowLine)
shape.addChild(redLine)
shape.addChild(blueLine)
let rotateAction = SKAction.rotateByAngle(CGFloat(M_PI_4) * 2, duration: 5)
shape.runAction(rotateAction)
}
Ich versuchte zRotation
auch, aber das hat nicht funktioniert. Wenn die Drehung mit einem SKAction geschieht, nimmt sie beim Drehen die gesamte Form nach links, anstatt an derselben Stelle zu bleiben.
bearbeiten
Code:
var shape = SKNode()
override func didMoveToView(view: SKView) {
self.addChild(shape)
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0)
self.physicsWorld.contactDelegate = self
backgroundColor = UIColor.whiteColor()
let greenLine = SKSpriteNode(imageNamed: "Green")
greenLine.position = CGPoint(x: frame.size.width/2, y: frame.size.height/2.5)
let yellowLine = SKSpriteNode(imageNamed: "Yellow")
yellowLine.position = CGPoint(x: greenLine.position.x - greenLine.frame.width/2, y: frame.size.height/2)
let redLine = SKSpriteNode(imageNamed: "Red")
redLine.position = CGPoint(x: greenLine.position.x + greenLine.frame.width/2, y: frame.size.height/2)
let blueLine = SKSpriteNode(imageNamed: "Blue")
blueLine.position = CGPoint(x: frame.size.width/2, y: redLine.position.y + redLine.frame.height/2.3)
shape.position = CGPoint(x: 0, y: 0)
shape.addChild(greenLine)
shape.addChild(yellowLine)
shape.addChild(redLine)
shape.addChild(blueLine)
let center = SKSpriteNode(color: .redColor(), size: CGSize(width: 50, height: 50))
center.position = CGPoint(x: frame.midX, y: frame.midY)
shape.addChild(center)
let rotateAction = SKAction.rotateByAngle(CGFloat(M_PI_4) * 2, duration: 30)
shape.runAction(rotateAction)
}
Ich verstehe das meiste von dem, was Sie gesagt haben, außer dass ich nicht über das Koordinatensystem der Szene nachgedacht habe. Es macht vollkommen Sinn, wie du es erklärt hast und ich verstehe es vollständig, aber mein Problem ist mit der Linie 'shape.position = CGPoint (x: frame.midX y: frame.midY)'. Ich habe das schon mal probiert und habe es wieder getan, und wenn ich mein Projekt mit dieser Linie starte, nimmt es "Form" in die obere rechte Ecke und beginnt sich außerhalb der Szene zu drehen. – Sharukh
Könnte es daran liegen, wie ich die "Linien" positioniere? – Sharukh
@Sharukh Ja, es basiert darauf, wie Sie die Kinder des Formknotens positionieren. Wie gesagt, vergessen Sie nicht, dass die Linien im Koordinatensystem der Form positioniert sind. Um die Knotenposition der Form herauszufinden, fügen Sie einfach einen kleinen Punkt hinzu, wie ich es mit dem mittleren Knoten getan habe. Platzieren Sie es an CGPoint (0,0) und Sie werden sehen, wo der Formknoten platziert ist. – Whirlwind