ios – 如何使节点围绕spritekit游戏项目中节点外的点旋转

我遇到了这个答案,但答案对我来说并不清楚.有人可以提供一些示例代码吗?

创建一个SKNode并将其位置设置为旋转中心.将应该围绕该中心旋转的节点添加到中心节点.将子节点的位置设置为所需的偏移量(即半径,例如x 100).更改中心节点的旋转属性以使子节点围绕中心点旋转.

具体来说,“改变中心节点的旋转属性”到什么?

var centerNode: SKSpriteNode = SKSpriteNode(imageNamed: "image1")
centerNode.position = CGPointMake(self.frame.width/2,self.frame.height/2)
self.addChild(centerNode)

var nodeRotateMe: SKSpriteNode = SKSpriteNode(imageNamged: "image2")
nodeRotateMe.position = CGPointMake(self.frame.width/2 + 100,self.frame.height/2 + 100)
centerNode.addChild(nodeRotateMe)

// Change the rotation property of the center node to what??
centerNode.zRotation = ?

解决方法

你有几个选择:

1)您可以通过手动更改其zRotation属性,在SKScene的update:方法中随时间旋转centerNode.在每次更新调用时,您都必须缓慢地更改值:以实现逐渐旋转.

请注意,zRotation属性以弧度为单位,意味着180度旋转将等于pi(M_PI). SKScene努力更新:在60 FPS时,这意味着在5秒内旋转360度,每次更新调用时,您需要增加1/300度,这将是每次更新的1/150.

centerNode.zRotation = centerNode.zRotation + CGFloat(1.0/150.0 * M_PI)

当然,无法保证您的场景能够以60 FPS更新,因此您可能必须在更新中监视currentTime变量:并进行相应调整.

2)可能更好,您可以使用SKAction为您旋转centerNode.

let rotateAction = SKAction.rotateByAngle(CGFloat(2 * M_PI),duration: 5.0)
centerNode.runAction(rotateAction)

请注意,旋转角度是弧度,而不是度.另请注意,如果您不想在那里显示图像,则centerNode不必是Sprite Node;它可能是一个普通的SKNode.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...