私は平方形を構成する4つのSKSpriteNodes
からなるSKNode
を持っています(私はそれが正しいと言いたいと思います)。正方形の各辺は色が異なり、私はその位置を変えずに正方形全体を回転しようとしています。私が努力している方法は、回転を開始するときに常にその位置を変えるように誘導しています。SKNodeの位置を変更せずにSKNodeを回転するにはどうすればいいですか?
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)
}
シーンの座標系について考えなかった以外は、あなたが言ったことのほとんどを理解しています。あなたが説明した方法について完全に理解していますが、私はそれを完全に理解していますが、私の問題は 'shape.position = CGPoint(x:frame.midX y:frame.midY)'という行です。私はこれを前に試してやり直しました。私はそのラインでプロジェクトを実行すると、右上に「シェイプ」を持ち、シーンの外側を回転し始めます。 – Sharukh
私は 'lines'をどのように配置しているのでしょうか? – Sharukh
@Sharukhええ、それはシェイプノードの子をどのように配置するかに基づいています。私が言ったように、線が形の座標系に配置されていることを忘れないでください。また、シェイプのノード位置を調べるには、センターノードで行ったように、ちょっとした点を追加するだけです。 CGPoint(0,0)に配置すると、シェイプノードが配置される場所が決まります。 – Whirlwind