2016-02-20 2 views
1

У меня есть треугольник вокруг круга, и я создал его. Если мой персонаж сталкивается с кирпичом, то треугольники на круге заменяют другое место на круге.Как правильно поворачивать треугольник вокруг круга?

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

Это происходит, когда я нажимаю на экран (и это прекрасно), но его вращение.

это необходимо выглядит следующим образом:

enter image description here

, но его внешний вид так:

enter image description here

AddTriangleToCircle FUNC:

func AddTriangleToCircle(Circle: SKShapeNode, Location: CGFloat, Inside: Bool) { 

     Triangle = SKSpriteNode(imageNamed: "Triangle.png") 

     Triangle.size = CGSize(width: 30, height: 30) 
     Triangle.anchorPoint.y = 0 



     let path = CGPathCreateMutable() 

     CGPathMoveToPoint(path, nil,298,2) 
     CGPathAddLineToPoint(path, nil,149,298) 
     CGPathAddLineToPoint(path, nil,0,0) 
     CGPathAddLineToPoint(path, nil,298,2) 

     CGPathCloseSubpath(path) 

     Triangle.physicsBody = SKPhysicsBody(polygonFromPath: path) 


     if Inside == true { 
      // Inside Triangle 
      Triangle.zRotation = CGFloat(M_PI_2) 
     } else { 
      // Outside Triangle 
      Triangle.zRotation = CGFloat(-M_PI_2) 
     } 

     Triangle.position = CGPoint(x:0.5, y:circleRadius) 

     let rotationSpeed1 = rotationSpeed + Location; 
     var angleRelatedToCircle1 = angleRelatedToCircle; 

     angleRelatedToCircle1 -= rotationSpeed1 
     Triangle.zRotation -= rotationSpeed1 

     Triangle.position.x = circleRadius * cos(angleRelatedToCircle1) 
     Triangle.position.y = circleRadius * sin(angleRelatedToCircle1) 


     //Triangle.physicsBody = SKPhysicsBody(texture:TriangelSKT, size: CGSize(width: 30, height:30)) 
     let centerPoint = CGPointMake(Triangle.size.width/2 - (Triangle.size.width * Triangle.anchorPoint.x), Triangle.size.height/2 - (Triangle.size.height * Triangle.anchorPoint.y)) 
     Triangle.physicsBody = SKPhysicsBody(rectangleOfSize: Triangle.size , center: centerPoint) 
     Triangle.physicsBody?.categoryBitMask = triangleCategory 
     Triangle.physicsBody?.contactTestBitMask = heroCategory 
     Triangle.physicsBody?.collisionBitMask = heroCategory 
     Triangle.physicsBody?.allowsRotation = false 
     // Set Dynamic to false 
     Triangle.physicsBody?.dynamic = false 
     Circle.addChild(Triangle); 
    } 

AddCircle FUNC:

func AddCircle() { 

      Circle = SKShapeNode(circleOfRadius: circleRadius) 
      Circle.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
      Circle.strokeColor = UIColor.whiteColor() 
      Circle.lineWidth = 9.5 
      Circle.fillColor = UIColor(red:0.98, green:0.82, blue:0.32, alpha:1.0) 
      self.addChild(Circle) 
      Circle.addChild(BooCharacter) 



      self.AddTriangleToCircle(Circle, Location: CGFloat(random(1...100)), Inside: false) 
      self.AddBrickToCircle(Circle, Location: CGFloat(random(1...200)), inside: true) 
      self.AddTriangleToCircle(Circle, Location: CGFloat(random(1...400)), Inside: false) 


} 

touchsbegan FUNC:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

      BooCharacter.zRotation += CGFloat(M_PI) 
      TapToStart.removeFromParent() 

      for touch in touches { 
      let location = touch.locationInNode(self) 



      } 

      initializeValues()  
    } 

initializeValues ​​FUNC:

func initializeValues() { 
    self.removeAllChildren() 
    AddCircle() 
    } 
+2

ваш " что я хочу »и« то, что у меня есть », идентичны. –

+0

благодарит вас. Я исправляю это сейчас! –

ответ

0

Так что вам нужно найти две точки на окружности на основе на угол.

точка на окружности находится этот путь -

func pointOnCircle(radius:CGFloat, angleInRadians:CGFloat, circleCenter:CGPoint) -> CGPoint { 

     return CGPoint(
       x:circleCenter.x - radius * cos(angleInRadians), 
       y:circleCenter.y - radius * sin(angleInRadians) 
    ) 

} 

Не забудьте преобразовать из градусов в радианы, если это необходимо.

Вам необходимо определить угол (который определяет размер треугольника) и начальную точку на круге.

Используйте этот угол, чтобы найти другую базовую точку треугольника на круге с формулой и использовать его снова только с меньшим углом (половина из исходного угла, вероятно, будет выполнена) и большим радиусом, поскольку третья точка треугольника можно рассматривать, как будто он находится на большом круге (красная граница круга), который разделяет ту же точку в центре, как ваш оригинальный круг (зеленый один)

enter image description here

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