Juego básico swift / spritekit: problemas para volver a dibujar

He estado jugando con rapidez y he estado tratando de hacer un juego basado en baldosas con una vista de desplazamiento para que el jugador esté en el centro. Tengo un administrador para que funcione, pero parece que estoy networkingibujando todos los nodos encima de lo que está actualmente, así que después de algunos movimientos tengo más de 1000 nodos y el juego se detiene. Supongo que necesito eliminar todos los nodos anteriores antes de dibujar los nuevos. He visto maneras de hacer esto, como eliminar a los niños, pero luego termino sin nada extrañado después de mudarme.

He incluido las partes que están conectadas al dibujo de sprites a continuación.

func placeTile2D(tile:Tile, direction:Direction, position:CGPoint) { let tileSprite = SKSpriteNode(imageNamed: textureImage(tile, direction: direction, action: Action.Idle)) if (tile == hero.tile) { hero.tileSprite2D = tileSprite hero.tileSprite2D.zPosition = 1 } tileSprite.position = position tileSprite.anchorPoint = CGPoint(x:0,y:0) view2D.addChild(tileSprite) } func placeAllTiles2D() { let playerPosCur = playerPosition let playerPCX: Int = (Int(playerPosCur.x)) let playerPCY: Int = (-Int(playerPosCur.y)) var w = 1 var h = 1 for i in (playerPCY - 4) ..< (playerPCY + 4){ let row = tiles[i]; w = 1 for j in playerPCX - 4 ..< playerPCX + 4 { let tile = Tile(rawValue: row[j].0)! let direction = Direction(rawValue: row[j].1)! let point = CGPoint(x: (w*tileSize.width), y: -(h*tileSize.height)) if w == 5 { if h == 5 { self.placeTile2D(Tile.Player, direction: .n, position: point) } } w = w + 1 placeTile2D(tile, direction : direction, position : point) } h = h + 1 } } 

es lo que estoy usando para dibujar las fichas alnetworkingedor del jugador, y luego abajo si lo que estoy usando para cambiar la position del jugador y luego llamo a la function placeAllTiles2D () para volver a dibujar en function de la nueva position.

 override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let location = touch.locationInNode(view2D) let touchPos2D = location let moveXR = CGPoint(x:1,y:0) let moveXL = CGPoint(x:-1,y:0) let moveYU = CGPoint(x:0,y:1) let moveYD = CGPoint(x:0,y:-1) let beforeMove = playerPosition var afterMove = CGPoint(x:0,y:0) if touchPos2D.x > self.size.width*3/4 { //Move player to right afterMove = beforeMove + moveXR } if touchPos2D.x < self.size.width*1/4 { //Move Player to left afterMove = beforeMove + moveXL } if touchPos2D.y > -self.size.height/2 { if touchPos2D.x < self.size.width*3/4 && touchPos2D.x > self.size.width*1/4 { //Move PLayer Up afterMove = beforeMove + moveYU } } if touchPos2D.y < -self.size.height/2 { if touchPos2D.x < self.size.width*3/4 && touchPos2D.x > self.size.width*1/4 { //Move Player Down afterMove = beforeMove + moveYD } } playerPosition = afterMove placeAllTiles2D() } } 

Cualquier ayuda sería realmente muy apreciada. ¡Por favor sea amable, es mi primera visita a cualquier cosa rápida!

SKCameraNode utilizar SKCameraNode y pensar que mueve la vista en lugar de generar mosaicos y volver a dibujar cada fotogtwig. Aquí hay un buen ejemplo

Basicamente funciona de esta manera:

 var sceneCam: SKCameraNode! //declare your camera variable in your scene class 

Luego, en su function didMoveToView :

 sceneCam = SKCameraNode() //initialize your camera //scaleAsPoint lets you zoom the camera in and out sceneCam.scaleAsPoint = CGPoint(x: 0.25, y: 0.25) camera = sceneCam //set the scene's camera addChild(sceneCam) //add camera to scene //position the camera on the gamescene. sceneCam.position = CGPoint(x: frame.center.x, y: frame.center.y) 

Ahora, cuando mueves a tu jugador, simplemente coloca la camera en la misma position que el jugador y tendrás tu escena de desplazamiento. Estoy de acuerdo con los comentarios. Vas a pasar un mejor rato en esto si repasas algunos de los fundamentos del kit de sprite: aprende sobre todas las cosas con las que viene, y puedes evitar pasar por alto cosas como SKCameraNode . Hay muchas cosas que SpriteKit hace por ti, como este concepto de camera, para ayudar a hacer juegos rápida y fácilmente.