2016-06-25 158 views
0

我的目標是在SKScene的背景中有一個靜態節點。在這個場景中,我根據需要使用SKCameraNode進行平移。SpriteKit:移動場景中的靜態背景SKCameraNode

背景節點必須是靜態的,因爲它顯示了預計不會移動的遠處的天空。

問題

如果我只想補充的背景節點作爲孩子的場景,我將不得不移動以同樣的方式相機轉動的背景下,爲了有背景總是完全在相機的視口內可見。我不想這樣做,因爲背景節點會應用一些視覺效果和濾鏡,因此移動它會導致性能下降。

我想要的是將背景作爲靜態節點或視圖放置在背景中,爲了「跟隨」相機,不需要移動該背景或視圖。

有什麼我試過

我知道,一個節點可以以確保其符合相機被添加爲孩子SKCameraNode。但正如蘋果所言,這對HUD元素比如樂譜標籤等是非常有用的,而這些元素通常都是高於一切的。如果你想添加背景,這當然是不適用的,因爲我希望它在背景中,在作爲子節點直接添加到場景中的節點後面。儘管如此,我試圖將相關節點作爲子節點添加到相機節點,並使用z位置和類似的東西進行播放,但沒有任何幫助,如預期的那樣。

我也嘗試將背景作爲子視圖添加到根SKView,但由於某種原因,我無法將其渲染到場景後面。

在此先感謝。

回答

1

編輯:沒關係我的第一個答案是死路一條。下面的作品雖然似乎是你已經嘗試過的東西:將背景作爲孩子添加到相機。

我想你剛剛在zPosition上遇到了一些問題。據我所知,下面的概念驗證按預期工作。

class GameScene: SKScene { 
    let cameraNode = SKCameraNode() 

    override func didMoveToView(view: SKView) { 
     let center = CGPointMake(view.frame.size.width/2, view.frame.size.height/2) 

     cameraNode.position = center 
     addChild(cameraNode) 
     camera = cameraNode 
     let background = SKSpriteNode(color: SKColor.orangeColor(), size: view.frame.size) 
     cameraNode.addChild(background) 

     let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(100, 100)) 
     sprite.position = center 
     addChild(sprite) 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     let move = SKAction.moveBy(CGVectorMake(200, 0), duration: 2) 
     cameraNode.runAction(move) 
    } 
} 
+0

你是什麼意思?將cameraNode連接到場景而不是單獨的「平移節點」? – damirstuhec

+0

沒關係,這是一個死衚衕,但上述應該工作得很好。 –

+0

您的解決方案有效。我嘗試過同樣的事情,但我的問題是我沒有將我的'cameraNode'作爲孩子添加到場景中。我確信我不必明確地這樣做,因爲系統已經提供了一個'camera'屬性,等待被初始化並且如果需要就準備好了。奇怪的是,即使我沒有把它作爲一個孩子添加到場景中,平移和其他所有關於相機的工作都如預期的那樣工作。現在它可以工作。謝謝! – damirstuhec