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