2014-10-09 18 views
5

Tôi có SKShapeNode (hình chữ nhật trong trường hợp này) mà tôi đang cố xoay dọc theo tâm của nó. Tuy nhiên nó đang xoay dọc theo điểm dưới cùng bên trái của màn hình. Vì tôi không thể thiết lập một điểm neo cho SKShapeNode, làm thế nào tôi có thể đạt được yêu cầu của mình (để xoay hình dọc theo tâm của nó). Đây là mã tôi đang cố gắng.Xoay SKShapeNode dọc theo chính giữa

let rectangle = SKShapeNode() 
    rectangle.path = UIBezierPath(rect: CGRectMake(view.frame.width/4, view.frame.height/2, view.frame.width/2, view.frame.width/2)).CGPath 
    rectangle.fillColor = UIColor.yellowColor() 
    rectangle.strokeColor = UIColor.yellowColor() 

    let oneRevolution = SKAction.rotateByAngle(360, duration: 100.0) 
    let repeat = SKAction.repeatActionForever(oneRevolution) 
    rectangle.runAction(repeat) 

enter image description here

Trả lời

1
SKSpriteNode rectangle = [SKSpriteNode spriteWithSize size: CGSizeMake(20,20)]; 

Bạn có thể làm cho hình chữ nhật giống như một spriteNode mà sẽ cung cấp cho bạn truy cập để thay đổi anchorpoint. Cú pháp của tôi có thể bị tắt một chút nhưng tôi tin rằng nó cũng có thể mất một màu trong hàm tạo.

+1

đã khắc phục câu hỏi. –

0

Khi bạn tạo các SKShapeNode bạn phải đặt nó vào trung tâm theo cách này:

let shapePath = UIBezierPath(...) 
... 
...    
let shape = SKShapeNode(path: shapePath.cgPath, centered: true) 

Bằng cách đó các điểm neo của SKShapeNode sẽ là điểm trung tâm.

0

Chúng tôi phải đặt chính xác SKShapeNode trước khi áp dụng xoay vòng.

import SpriteKit 
    import PlaygroundSupport 

    let bounds = CGRect(x: 0, y: 0, width: 400, height: 200) 
    let skview = SKView(frame: bounds) 

    PlaygroundPage.current.liveView = skview 

Trong ví dụ đầu tiên và thứ hai dưới đây, điều này được thực hiện bằng cách thiết lập xy thông số khi khởi tạo các hình chữ nhật, và sau đó thiết lập các thuộc tính position.

let first = SKShapeNode(rect: CGRect(x:-20, y:-20, width: 40, height: 40)) 
    first.position = CGPoint(x: 70, y: 30) 


    let second = SKShapeNode(rect: CGRect(x:-20, y:-20, width: 40, height: 40)) 
    second.position = CGPoint(x: 70, y: 30) 
    second.zRotation = CGFloat.pi * 0.15 
    second.strokeColor = .red 

Trong ví dụ thứ ba dưới đây, điều này được thực hiện bằng cách thiết lập centered để true khi khởi tạo các hình dạng, và sau đó thiết lập các thuộc tính position.

let path = CGMutablePath(); 
    path.move(to: CGPoint(x: 50,y: 10)) 
    path.addLine(to: CGPoint(x: 90, y: 10)) 
    path.addLine(to: CGPoint(x: 90, y: 50)) 
    path.addLine(to: CGPoint(x: 50, y: 50)) 
    path.addLine(to: CGPoint(x: 50, y: 10)) 

    let third = SKShapeNode(path: path, centered: true); 
    third.position = CGPoint(x: 70,y: 30); 
    third.zRotation = CGFloat.pi * 0.35 
    third.strokeColor = .yellow 

    let scene = SKScene(size: CGSize(width: 400, height: 200)) 
    scene.scaleMode = SKSceneScaleMode.aspectFill 
    scene.size = skview.bounds.size 
    scene.addChild(first); 
    scene.addChild(second); 
    scene.addChild(third); 
    skview.presentScene(scene); 
Các vấn đề liên quan