UIBezierPath围绕圆自身,swift和SpriteKit内的一个点旋转

f_qi

我使用以下代码设置了一个带有4个偶数扇区的圆:

func centerCircle() {

    let center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
    // node1
    let node1bezierPath = UIBezierPath()
    node1bezierPath.addArcWithCenter(center, radius: 100, startAngle: 0.78, endAngle: 2.35, clockwise: true)
    node1bezierPath.addLineToPoint(center)

    let node1 = SKShapeNode(path: node1bezierPath.CGPath)
    node1.strokeColor = SKColor.redColor()
    node1.fillColor = SKColor.redColor()
    self.addChild(node1)
    // node2
    let node2bezierPath = UIBezierPath()
    node2bezierPath.addArcWithCenter(center, radius: 100, startAngle: 2.35, endAngle: 3.92, clockwise: true)
    node2bezierPath.addLineToPoint(center)

    let node2 = SKShapeNode(path: node2bezierPath.CGPath)
    node2.strokeColor = SKColor.blueColor()
    node2.fillColor = SKColor.blueColor()
    self.addChild(node2)
    // node3
    let node3bezierPath = UIBezierPath()
    node3bezierPath.addArcWithCenter(center, radius: 100, startAngle: 3.92, endAngle: 5.48, clockwise: true)
    node3bezierPath.addLineToPoint(center)

    let node3 = SKShapeNode(path: node3bezierPath.CGPath)
    node3.strokeColor = SKColor.greenColor()
    node3.fillColor = SKColor.greenColor()
    self.addChild(node3)
    // node4
    let node4bezierPath = UIBezierPath()
    node4bezierPath.addArcWithCenter(center, radius: 100, startAngle: 5.48, endAngle: 0.78, clockwise: true)
    node4bezierPath.addLineToPoint(center)

    let node4 = SKShapeNode(path: node4bezierPath.CGPath)
    node4.strokeColor = SKColor.yellowColor()
    node4.fillColor = SKColor.yellowColor()
    self.addChild(node4)

}

我要实现的是,当我在屏幕上点击时,该圆将绕其中心旋转90度。

center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))

我试图设置centerCircle()-> SKSpriteNode,并添加一个SKAction.rotateByAngle,它不起作用。我在StackOverflow上搜索了其他帖子,也没有运气。有什么想法可以使它正常工作吗?非常感谢。

rakeshbs

您可以将添加SKShapeNodesSKNode,然后旋转SKNode例如,你可以创建一个自定义类的SKNode这样的

class FourColorCircle : SKNode {

    override init() {
        super.init()
        self.createCircle()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    func createCircle () {
        let center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
        // node1
        let node1bezierPath = UIBezierPath()
        node1bezierPath.addArcWithCenter(center, radius: 100, startAngle: 0.78, endAngle: 2.35, clockwise: true)
        node1bezierPath.addLineToPoint(center)

        let node1 = SKShapeNode(path: node1bezierPath.CGPath)
        node1.strokeColor = SKColor.redColor()
        node1.fillColor = SKColor.redColor()
        self.addChild(node1)
        // node2
        let node2bezierPath = UIBezierPath()
        node2bezierPath.addArcWithCenter(center, radius: 100, startAngle: 2.35, endAngle: 3.92, clockwise: true)
        node2bezierPath.addLineToPoint(center)

        let node2 = SKShapeNode(path: node2bezierPath.CGPath)
        node2.strokeColor = SKColor.blueColor()
        node2.fillColor = SKColor.blueColor()
        self.addChild(node2)
        // node3
        let node3bezierPath = UIBezierPath()
        node3bezierPath.addArcWithCenter(center, radius: 100, startAngle: 3.92, endAngle: 5.48, clockwise: true)
        node3bezierPath.addLineToPoint(center)

        let node3 = SKShapeNode(path: node3bezierPath.CGPath)
        node3.strokeColor = SKColor.greenColor()
        node3.fillColor = SKColor.greenColor()
        self.addChild(node3)
        // node4
        let node4bezierPath = UIBezierPath()
        node4bezierPath.addArcWithCenter(center, radius: 100, startAngle: 5.48, endAngle: 0.78, clockwise: true)
        node4bezierPath.addLineToPoint(center)

        let node4 = SKShapeNode(path: node4bezierPath.CGPath)
        node4.strokeColor = SKColor.yellowColor()
        node4.fillColor = SKColor.yellowColor()
        self.addChild(node4)

    }

    func rotate(angle : CGFloat, animated : Bool) {
        var rotateAction : SKAction!

        if animated {
            rotateAction = SKAction.rotateByAngle(angle, duration: 0.6)
        }
        else {
            rotateAction = SKAction.rotateByAngle(angle, duration: 0)
        }

        self.runAction(rotateAction)
    }
}

然后,您可以像这样使用它,

let circle = FourColorCircle()
addChild(circle)
circle.position = CGPointMake(200, 200)
circle.rotate(3.14/2, animated: true)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何使用CAShapeLayer和UIBezierPath绘制一个平滑的圆?

来自分类Dev

是否可以围绕SpriteKit中的任意点旋转节点?

来自分类Dev

围绕一个点旋转画布并获得新的x,y

来自分类Dev

用于绘制的画布是一个圆;画布内的随机点

来自分类Dev

在Java中将一个对象围绕另一个对象旋转

来自分类Dev

在Java中将一个对象围绕另一个对象旋转

来自分类Dev

如何围绕选定的游戏对象创建一个圆?

来自分类Dev

围绕另一个任意点旋转点

来自分类Dev

使用swift和spriteKit,如何围绕节点外部的点旋转SKSpriteNode?

来自分类Dev

如何使用SpriteKit快速绘制一个圆?

来自分类Dev

Swift和SpriteKit:将两个精灵作为一个内聚单元移动?

来自分类Dev

围绕另一个CGPoint旋转CGPoint

来自分类Dev

如何围绕一个点旋转图片框?

来自分类Dev

旋转椭圆的绘制点以给出一个圆

来自分类Dev

围绕另一个点和X轴旋转点

来自分类Dev

围绕另一个元素旋转元素-CSS

来自分类Dev

围绕一个点旋转,物体持续不断地前进

来自分类Dev

围绕另一个点旋转一个点-错误的方向

来自分类Dev

如何使图像围绕自身和圆圈旋转?

来自分类Dev

给定中心点和另外两个点,绘制一个圆的小弧

来自分类Dev

围绕另一个旋转对象

来自分类Dev

围绕另一个任意点旋转点

来自分类Dev

围绕另一个点旋转一个点

来自分类Dev

围绕另一个gameObject旋转gameObjects

来自分类Dev

如何围绕一个点旋转图片框?

来自分类Dev

Mathematica:围绕另一个点旋转一个点

来自分类Dev

围绕另一个旋转圆旋转圆圈

来自分类Dev

如何围绕JavaFX中的一个点旋转三角形并获取点的值?

来自分类Dev

如何在 Xcode 中围绕一个点或 UIView 的中心旋转按钮?

Related 相关文章

热门标签

归档