У меня есть SKNode
, который состоит из 4 SKSpriteNodes
, образующих квадратную форму (надеюсь, я правильно выразился). Каждая сторона квадрата имеет свой цвет, и я пытаюсь повернуть весь квадрат, не меняя его положения. То, как я пытаюсь, всегда приводит его к изменению его положения, когда он начинает вращение. Вот как я к этому подошел:
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)
}
Я тоже пробовал zRotation
, но это вообще не сработало. Когда вращение происходит с помощью SKAction, при вращении вся форма перемещается влево, а не остается на одном месте.
Редактировать
Код:
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)
}