2015-06-11 40 views
2

我遇到了這個答案,但答案並不清楚。有人可以提供一些示例代碼?如何使一個節點在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

你有兩個選擇:

1)你可以通過手動改變其zRotation財產旋轉centerNode隨着時間的推移在你SKSceneupdate:方法。您必須在每次致電update:時慢慢更改數值,以實現逐漸旋轉。

請注意,zRotation屬性以弧度表示,其中180度旋轉將等於pi(M_PI)。 SKScene努力在60 FPS,這意味着要在5秒內360度旋轉update:,你需要每增加一個度,每次更新的1/3度,這將是每更新pi的1/150。

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

當然,也不能保證你的場景將能夠以60 FPS更新,所以你可能要監視currentTime變量update:並相應地調整。

2)可能更好,您可以使用SKAction爲您旋轉centerNode

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

請注意,旋轉角度是弧度而不是度數。另外請注意,如果您不想在那裏顯示圖像,則centerNode不必是Sprite節點;它可能是一個普通的SKNode。

+0

好吧我試試第二個選項。我以前在不同的場景中使用過 – macabee

+1

在大多數情況下,SKAction是一條路。它可以設置爲自動重複旋轉,採用最短路徑,轉到特定角度,甚至可以在動畫完成時運行代碼塊。最重要的是,無論您的應用程序是否達到60 FPS,它都會適當地旋轉精靈,這是手動操作的痛處。 – justinpawela

+0

這是否適合您? – justinpawela

相關問題