2015-12-10 5 views
3

Я попытался создать объект, вращающийся за пределами круга, но он поворачивает его внутри круга.Создайте объект, вращающийся за пределами круга

Это то, что я хочу сделать (мой персонаж):

enter image description here

func moveClockWise() { 

      var dx = Character.position.x - self.frame.width/2 
      var dy = Character.position.y - self.frame.height/2 

      var rad = atan2(dy, dx) 

      Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width/2, y: self.frame.height/2), radius: 150, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true) 
      let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 200) 
      Character.runAction(SKAction.repeatActionForever(follow)) 
    } 

, но это то, что случилось:

enter image description here

+0

Пожалуйста, постарайтесь быть более конкретным, когда задают вопросы. Объясните свою проблему, а не просто используйте скриншоты/код. –

+0

Я попытался создать объект, вращающийся за пределами круга, но он поворачивает его внутри круга. – omer15

+0

Вы используете радиус внутреннего круга (синий). Попробуйте использовать радиус внешнего круга (белый) –

ответ

4

Я не обойтись точным способом y ou are .. но это то, что я придумал. просто скопировать вставить код и попробовать его :)

enter image description here

class GameScene: SKScene { 

    let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSize(width: 20, height: 30)) 
    let circleRadius = CGFloat(100) 

    var angleRelatedToCircle = CGFloat(0) 
    let rotationSpeed = CGFloat(0.01) 

    override func didMoveToView(view: SKView) { 

     let topOfSprite = SKSpriteNode(color: SKColor.blueColor(), size: CGSize(width: 20, height: 2)) 
     topOfSprite.position.y = sprite.size.height 
     sprite.addChild(topOfSprite) 
     sprite.anchorPoint.y = 0 
     sprite.zRotation = CGFloat(-M_PI_2) 

     let circle = SKShapeNode(circleOfRadius: circleRadius) 
     circle.fillColor = SKColor.whiteColor() 
     circle.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
     self.addChild(circle) 
     circle.addChild(sprite) 

     sprite.position.y += circleRadius 
    } 


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     sprite.zRotation += CGFloat(M_PI) 
    } 

    override func update(currentTime: NSTimeInterval) { 
     angleRelatedToCircle -= rotationSpeed 
     sprite.zRotation -= rotationSpeed 

     sprite.position.x = circleRadius * cos(angleRelatedToCircle) 
     sprite.position.y = circleRadius * sin(angleRelatedToCircle) 
    } 
} 
+0

Я могу заменить skshapenode на skspritenode? – omer15

+0

вы можете сделать все, что захотите. – hamobi

+0

да, я сделал это, спасибо :) – omer15

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