2015-11-10 5 views
1

Я хочу добавить определенное количество квадратов в сцену. Когда я это делаю, часть квадрата выходит за рамки. Можно ли перемещать всю сцену по оси y?SpriteKit: Move Whole Scene

ответ

1

Я попытался, и похоже, что сама сцена не может быть перемещена. Альтернативный подход - добавить SKNode к сцене, которая представляет весь мир. Добавьте все остальные элементы в мировой узел. Теперь вы можете переместить этот узел, если хотите переместить всю сцену. Я работаю над небольшим учебником об этом в своем блоге. Вот мой текущий код:

import SpriteKit 

class GameScene: SKScene { 

// Declare the needed nodes 
var worldNode: SKNode? 
var spriteNode: SKSpriteNode? 
var nodeWidth: CGFloat = 0.0 

override func didMoveToView(view: SKView) { 

    // Setup world 
    worldNode = SKNode() 
    self.addChild(worldNode!) 

    // Setup sprite 
    spriteNode = SKSpriteNode(imageNamed: "Spaceship") 
    spriteNode?.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)) 
    spriteNode?.xScale = 0.1 
    spriteNode?.yScale = 0.1 
    spriteNode?.zPosition = 10 
    self.addChild(spriteNode!) 

    // Setup backgrounds 
    // Image of left and right node must be identical 
    let leftNode = SKSpriteNode(imageNamed: "left") 
    let middleNode = SKSpriteNode(imageNamed: "right") 
    let rightNode = SKSpriteNode(imageNamed: "left") 

    nodeWidth = leftNode.frame.size.width 

    leftNode.anchorPoint = CGPoint(x: 0, y: 0) 
    leftNode.position = CGPoint(x: 0, y: 0) 
    middleNode.anchorPoint = CGPoint(x: 0, y: 0) 
    middleNode.position = CGPoint(x: nodeWidth, y: 0) 
    rightNode.anchorPoint = CGPoint(x: 0, y: 0) 
    rightNode.position = CGPoint(x: nodeWidth * 2, y: 0) 

    worldNode!.addChild(leftNode) 
    worldNode!.addChild(rightNode) 
    worldNode!.addChild(middleNode) 


} 


var xOrgPosition: CGFloat = 0 
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    for touch in touches { 

     let xTouchPosition = touch.locationInNode(self).x 
     if xOrgPosition != 0.0 { 
      let xNewPosition = worldNode!.position.x + (xOrgPosition - xTouchPosition) 

      if xNewPosition <= -(2 * nodeWidth) { 
       // right end reached 
       worldNode!.position = CGPoint(x: 0, y: 0) 
       print("Right end reached") 
      } else if xNewPosition >= 0 { 
       // left end reached 
       worldNode!.position = CGPoint(x: -(2 * nodeWidth), y: 0) 
       print("Left end reached") 
      } else { 

       worldNode!.position = CGPoint(x: xNewPosition, y: 0) 
      } 
     } 
     xOrgPosition = xTouchPosition 
    } 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    // Reset value for the next swipe gesture 
    xOrgPosition = 0 
} 

override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
} 

}

+0

Будет ли использоваться как worldNode.addChild (otherNode) –

+0

Да. Я могу опубликовать образец позже – Stefan

+0

Да, перемещение сцены не то, что вы хотите сделать (хотя это можно сделать) Следуйте за началом запуска с главного узла для всех ваших объектов в сцене, а затем просто переместите главный узел вокруг внутри сцены, чтобы все ваши узлы перемещались. Это отличный подход, когда вы хотите добавить HUD в игру. вы добавили бы свой главный узел к сцене, а затем ваш узел HUD на сцену, чтобы при перемещении вашего главного узла перемещались только те объекты, которые были прикреплены к главному, а узлы в HUD останутся статическими – Knight0fDragon