2015-10-23 2 views
0

Мне нужно создать круг, который начинается в середине экрана с крошечным радиусом, который постепенно вырастает из центра. Есть ли способ сделать это, если круг является SKSpriteNode? Идея заключается в том, чтобы радиус увеличивался, без других качеств, таких как увеличение инсульта.Как изменить радиус SKSpriteNode в Swift?

До сих пор:

func randomCircle(){ 
    let RandomCircleShape = SKShapeNode(circleOfRadius: 1) 
    RandomCircleShape.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 
    RandomCircleShape.strokeColor = randomColor() 
    RandomCircleShape.lineWidth = 2 
    self.addChild(RandomCircleShape) 
} 

ответ

0

Вот один из способов достижения расширяющегося круга, который сохраняет свою ширину линии. Добавьте аргумент радиуса в свою функцию и верните его SKShapeNode. Кроме того, добавьте свойства узла и радиуса к вашему GameScene класс:

var randomCircle: SKShapeNode? 
var currentRadius: CGFloat = 1 

func makeRandomCircle(radius: CGFloat) -> SKShapeNode { 
    let RandomCircleShape = SKShapeNode(circleOfRadius: radius) 
    RandomCircleShape.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 
    RandomCircleShape.strokeColor = UIColor.redColor() 
    RandomCircleShape.lineWidth = 2 
    return RandomCircleShape 
} 

Затем создайте расширяющийся эффект за счет изменения радиуса с течением времени при добавлении и удалении узлов на главном потоке:

var i = 0 
while i < 300 { 
    let delay = 0.001 * Double(i) * Double(NSEC_PER_SEC) 
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
    dispatch_after(time, dispatch_get_main_queue()) { 
     self.currentRadius += 0.25 
     self.randomCircle!.removeFromParent() 
     self.randomCircle = self.makeRandomCircle(self.currentRadius) 
     self.addChild(self.randomCircle!) 
    } 
    i++ 
} 

Этот код может быть размещен там, где вы хотите, чтобы эффект произошел.

GIF результата:

enter image description here

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