2016-03-31 4 views
3

Я пытаюсь повернуть SKShapeNode с текстурой, но это не работает. В принципе, у меня есть круг с текстурой, и я пытаюсь сделать его вращаться, используя тот же путь, который я сделал с SKSpriteNode:Поворот SKShapeNode с текстурой

let spin = SKAction.rotateByAngle(CGFloat(M_PI/4.0), duration: 1) 

Проблема заключается в том, что круг вращается, но не текстура. Я могу проверить это с помощью этого кода:

let wait = SKAction.waitForDuration(0.5) 
let block = SKAction.runBlock({ 
        print(self.circle.zRotation) 
        }) 
let sequence = SKAction.sequence([wait, block]) 
self.runAction(SKAction.repeatActionForever(sequence)) 

Это код, у меня есть для создания SKShapeNode:

let tex:SKTexture = SKTexture(image: image) 
let circle = SKShapeNode(circleOfRadius: 100) 
circle.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2 + 200) 
circle.strokeColor = SKColor.clearColor() 
circle.glowWidth = 1.0 
circle.fillColor = SKColor.whiteColor() 
circle.fillTexture = tex 
self.addChild(circle) 
// Runing the action 
circle.runAction(spin) 

Пожалуйста, помогите. Заранее спасибо!

PS: Я знаю, что использование SKSpriteNode было бы лучше, но моя цель - разместить квадратное изображение в круговой рамке, и я подумал, что использование SKShapeNode было бы идеальным. Если кто-нибудь знает, как создать круговой номер SKSpriteNode, не стесняйтесь публиковать его в разделе ответов! :)

Это то, что я пытаюсь добиться (с возможностью его вращения): enter image description here

+0

Вы должны использовать радианы вместо градусов ... – Whirlwind

+0

Я пробовал, и он не работает, но спасибо за попытку :) –

+0

Я не сказал, что это исправит проблему. Я только что предупредил о неправильном использовании методов rotateToAngle, которые принимают радианы ... – Whirlwind

ответ

2

Вы можете добиться того, что вы хотите с помощью SKCropNode и установив его свойство маски, чтобы быть круг текстуры:

override func didMoveToView(view: SKView) { 

    let maskShapeTexture = SKTexture(imageNamed: "circle") 

    let texture = SKTexture(imageNamed: "pictureToMask") 

    let pictureToMask = SKSpriteNode(texture: texture, size: texture.size()) 

    let mask = SKSpriteNode(texture: maskShapeTexture) //make a circular mask 

    let cropNode = SKCropNode() 
    cropNode.maskNode = mask 
    cropNode.addChild(pictureToMask) 
    cropNode.position = CGPoint(x: frame.midX, y: frame.midY) 
    addChild(cropNode) 
} 

Предположим, что изображение в маске имеет размер 300x300 пикселей. Круг, который вы используете в качестве маски, в этом случае должен иметь тот же размер. Значит, сам круг должен иметь радиус 150 пикселей (диаметр 300 пикселей) при создании в редакторе изображений.

Узел маски определяет видимую область изображения. Поэтому не делайте его слишком большим. Узел маски должен быть полностью непрозрачным кругом с прозрачным фоном.

+0

Это сработало отлично! Спасибо :) –

Смежные вопросы