Agregar matriz para mover el grupo de imágenes en bucle para Swift: SpriteKit

¿Cómo puedo agregar mi starsSqArray a un ciclo for en mi function de actualización que SKSpriteNodesfor todos los _starsSq1 para _starsSq1 para que todas las estrellas se muevan juntas y no por separado?

En este momento, mi class Swift sigue devolviendo un error que dice que _starsSqArray no tiene una position (mi código está anulado). Mi objective es agarrar las estrellas trazadas y moverlas hacia abajo de una vez.

 import SpriteKit class Stars:SKNode { //Images var _starsSq1:SKSpriteNode? //Variables var starSqArray = Array<SKSpriteNode>() var _starSpeed1:Float = 5; requinetworking init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override init() { super.init() println("stars plotted") createStarPlot() } /*------------------------------------- ## MARK: Update -------------------------------------*/ func update() { for (var i = 0; i < starSqArray.count; i++) { _starsSq1!.position = CGPoint(x: self.position.x , y: self.position.y + CGFloat(_starSpeed1)) } } /*------------------------------------- ## MARK: Create Star Plot -------------------------------------*/ func createStarPlot() { let screenSize: CGRect = UIScreen.mainScreen().bounds let screenWidth = screenSize.width let screenHeight = screenSize.height for (var i = 0; i < 150 ; i++) { _starsSq1 = SKSpriteNode(imageNamed: "starSq1") addChild(_starsSq1!) //starSqArray.addChild(_starsSq1) var x = arc4random_uniform(UInt32(screenSize.width + 400)) var y = arc4random_uniform(UInt32(screenSize.height + 400)) _starsSq1!.position = CGPoint(x: CGFloat(x), y: CGFloat(y)) } } } 

Un par de sugerencias por un punto de vista de layout:

  1. Ya tienes todas tus estrellas (supongo que sí) agrupadas dentro de un nodo primario común (que has llamado correctamente Estrellas ). Entonces solo necesita mover su nodo de tipo Estrellas y todo su nodo secundario se moverá automáticamente.
  2. Cambiar manualmente las coorderadas de un nodo dentro de un método de actualización funciona pero (imho) no es la mejor manera de moverlo. Deberías usar SKAction en su lugar.

Entonces, si quieres mover las estrellas para siempre con una velocidad y dirección comunes, puedes agregar este método a Estrellas

 func moveForever() { let distance = 500 // change this value as you prefer let seconds : NSTimeInterval = 5 // change this value as you prefer let direction = CGVector(dx: 0, dy: distance) let move = SKAction.moveBy(direction, duration: seconds) let moveForever = SKAction.repeatActionForever(move) self.runAction(moveForever) } 

Ahora puede eliminar el código dentro del método de actualización y llamar a moveForever cuando desee que las estrellas comiencen a moverse.

Finalmente, en algún momento las estrellas saldrán de la pantalla. No sé el efecto que deseas lograr pero tendrás que lidiar con esto.

 for (SKSpriteNode *spriteNode in starSqArray) { spriteNode.position = CGPoint(x: spriteNode.position.x , y: spriteNode.position.y + GFloat(_starSpeed1)) } 

Use el código anterior en la function de actualización ().

Espero que esto ayude…