2016-06-25 7 views
0

Моя цель - создать статический узел на фоне SKScene. В этой сцене я использую SKCameraNode для панорамирования по мере необходимости.SpriteKit: статический фон в сцене с перемещением SKCameraNode

Узел фона должен быть статичным, поскольку он представляет небо на большом расстоянии, которое, как ожидается, не будет двигаться.

Проблема:

Если бы я просто добавить фоновую узел, как ребенок на сцену, я бы переместить фон таким же образом, камера приготовлена ​​для того, чтобы всегда полностью иметь фон видимый внутри камеры. Я не хочу этого делать, потому что фоновый узел имеет некоторые визуальные эффекты и фильтры, применяемые к нему, и поэтому его перемещение приводит к снижению производительности.

Что я хочу, имеет фон, выложенный в фоновом режиме как статический узел или представление, которое не нужно было бы перемещать, чтобы «следить» за камерой.

Что есть я попытался:

Я знаю, что узел может быть добавлен в качестве ребенка SKCameraNode для того, чтобы убедиться в том, что следует за камерой. Но, как предполагает Apple, это полезно для элементов 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

Что вы подразумеваете под 'connect the CameraNode не к сцене, а к отдельному« узлу панорамирования »? – damirstuhec

+0

Ничего, это был тупик, но вышеизложенное должно работать нормально. –

+0

Ваше решение работает. Я пробовал то же самое, но моя проблема заключалась в том, что я не добавлял свой «cameraNode» в качестве ребенка на сцену. Я был убежден, что мне не нужно явно это делать, поскольку уже существует свойство 'camera', предоставляемое системой, ожидающее инициализации и готовности к работе, если необходимо. Как ни странно, панорамирование и все остальное в отношении камеры работало так, как ожидалось, хотя я не добавлял его в сцену в качестве ребенка. Теперь это работает. Спасибо! – damirstuhec

 Смежные вопросы

  • Нет связанных вопросов^_^