ios - 如何正确绕圆旋转三角形?

标签 ios swift sprite-kit

我在圆圈周围有三角形,我创建了如果我的角色与砖 block 碰撞,那么圆圈上的三角形会替换圆圈上的另一个位置。

但我有问题,三角形在它发生时会旋转。

当我点击屏幕时会发生这种情况(这很好)但它正在旋转。

它需要看起来像这样:

enter image description here

但它看起来像那样:

enter image description here

AddTriangleToCircle 函数:

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 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 函数:

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()    
    }

初始化值函数:

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

最佳答案

所以你需要的是根据角度在圆上找到两点。

圆上的一个点是这样找到的-

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

关于ios - 如何正确绕圆旋转三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35528693/

相关文章:

ios - 协议(protocol)/委托(delegate)中 IBOutlet 的困难

ios - 从字典中查找空值的捷径技术?

ios - Firebase - iOS SDK - 按子值过滤

iOS - 在 UIImageView 中检索并显示来自 Parse 的图像(Swift 1.2 错误)

ios - 模态转换后释放 SKScene

objective-c - 无法在 iOS9 中暂停 SKEmitterNode

ios - SpriteKit 滚动底部在循环时有间隙

ios - 在 iOS13 上使用 UINavigationController 作为 UISplitViewController 的子级时不调用 ViewDidLoad 和 WillHideViewController

ios - 没有从 [UInt] 数组到数据的转换

ios - AnchroPoint x :0, y:0 不适用于方程式