2014-10-09 11 views
5

के साथ एक SKShapeNode घूर्णन करना मेरे पास एक एसकेशिप नोड (इस मामले में आयताकार) है जिसे मैं अपने केंद्र के साथ घूमने की कोशिश कर रहा हूं। हालांकि यह स्क्रीन के निचले बाएं बिंदु के साथ घूर्णन कर रहा है। चूंकि मैं SKShapeNode के लिए एंकर पॉइंट सेट नहीं कर सकता, इसलिए मैं अपनी आवश्यकता कैसे प्राप्त कर सकता हूं (इसके केंद्र के साथ आकार को घुमाने के लिए)। यह वह कोड है जिसे मैं कोशिश कर रहा हूं।अपने केंद्र

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

उत्तर

5

आप SKShapeNode प्रलेखन देखो क्या।

यदि हाँ, पथ का अनुवाद किया गया है ताकि पथ के बाध्यकारी बॉक्स का केंद्र नोड की उत्पत्ति पर हो; अन्यथा पथ नोड के मूल में संबंधित है।

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

इस तरह SKShapeNode का लंगर बिंदु केंद्र बिंदु होगा:

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

आप एक spriteNode जो आप anchorPoint बदलने के लिए पहुँच प्रदान करेगा के रूप में ही आयत बना सकते हैं। मेरा वाक्यविन्यास थोड़ा सा हो सकता है लेकिन मेरा मानना ​​है कि यह कन्स्ट्रक्टर में भी रंग ले सकता है। https://developer.apple.com/library/IOs/documentation/SpriteKit/Reference/SKShapeNode_Ref/index.html

उपयोग करके देखें::

shapeNodeWithPath:centered: 

चुनें हाँ केंद्रित के लिए

+1

प्रश्न को सही किया। –

0

जब आप SKShapeNode बनाने आप केंद्र इस तरह से करने के लिए यह सेट करना होगा।

0

हमें घूर्णन लगाने से पहले एसकेशिप नोड को स्पष्ट रूप से केंद्रित करना होगा।

import SpriteKit 
    import PlaygroundSupport 

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

    PlaygroundPage.current.liveView = skview 

नीचे पहले और दूसरे उदाहरण में, इस x और y मानकों की स्थापना, जबकि आयत आरंभ, और फिर स्थिति संपत्ति की स्थापना द्वारा किया जाता है।

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 

नीचे तीसरा उदाहरण में, इस true को centered की स्थापना आकार आरंभ, और फिर स्थिति संपत्ति सेट करते समय किया जाता है।

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); 
संबंधित मुद्दे