Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建在圆外旋转的对象_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios 创建在圆外旋转的对象

Ios 创建在圆外旋转的对象,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我试图创建一个在圆外旋转的对象,但它在圆内旋转。 这就是我想做的(我的角色): 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) Pat

我试图创建一个在圆外旋转的对象,但它在圆内旋转。

这就是我想做的(我的角色)

 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))
    }
但是发生了这样的事情:


我不会像你那样做的。。但这就是我想到的。只需复制粘贴代码并尝试:)

class游戏场景:SKScene{
设sprite=SKSpriteNode(颜色:SKColor.redColor(),大小:CGSize(宽度:20,高度:30))
设circleRadius=CGFloat(100)
var angleRelatedToCircle=CGFloat(0)
让旋转速度=CGFloat(0.01)
覆盖func didMoveToView(视图:SKView){
让topOfSprite=SKSpriteNode(颜色:SKColor.blueColor(),大小:CGSize(宽度:20,高度:2))
topOfSprite.position.y=sprite.size.height
sprite.addChild(topOfSprite)
sprite.anchorPoint.y=0
sprite.zRotation=CGFloat(-M_PI_2)
设圆=SKShapeNode(圆环半径:圆环半径)
circle.fillColor=SKColor.whiteColor()
circle.position=CGPoint(x:self.size.width/2,y:self.size.height/2)
self.addChild(圆)
circle.addChild(精灵)
sprite.position.y+=圆环
}
覆盖功能触摸开始(触摸:设置,withEvent事件:UIEvent?){
sprite.zRotation+=CGFloat(μPI)
}
覆盖函数更新(当前时间:NSTimeInterval){
与圆相关的角度-=旋转速度
sprite.z旋转-=旋转速度
sprite.position.x=圆*角(与圆相关)
sprite.position.y=圆环*sin(与圆环相关的角度)
}
}

提问时请尽量更具体。解释你的问题,而不仅仅是分享屏幕截图/代码。我试图创建一个对象在圆外旋转,但他在圆内旋转。你使用的是内圈的半径(蓝色的)。尝试使用外圆的半径(白色的)它不是蓝色的圆它是我背景中的一部分。看起来你需要不断调整旋转,使它在路径中始终朝向中心。我可以将skshapenode替换为skspritenode?你可以做任何你想要的。
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)
    }
}