// Creamos una constante donde guardaremos nuestro sprite de la nave. // Crear el sprite es fácil, solamente pasamos el nombre de la imagen // a usar let player = SKSpriteNode(imageNamed: "Spaceship") override func didMoveToView(view: SKView) { // Ponemos el fondo en negro backgroundColor = SKColor.blackColor() // Escalamos el sprite para que no sea tan grande player.xScale = 0.2 player.yScale = 0.2 // El sprite irá al inicio en el fondo y centrado player.position = CGPoint(x: size.width * 0.5, y: size.height * 0.1) // Agregamos el sprite a la escena, ya que si no lo hacemos no aparece addChild(player) } }
SKSpriteNode(imageNamed: "EnemyShip") // Necesitamos escalar a los enemigos para que no sean tan grandes enemy.xScale = 0.5 enemy.yScale = 0.5 // Determinamos en donde va a aparecer el enemigo en el eje X let actualX = random(min: enemy.size.width / 2, max: size.width - enemy.size.width / 2) // Posicionamos al enemigo un poco atrás de la pantalla para que se vea que vienen de arriba // y ponemos en X lo que calculamos arriba enemy.position = CGPoint(x: actualX, y: size.height + enemy.size.height / 2) // Agregamos el enemigo a la escena addChild(enemy) // Determinamos la velocidad del enemigo let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0)) // Creamos las acciones let actionMove = SKAction.moveTo(CGPoint(x: actualX, y: -enemy.size.height / 2), duration: NSTimeInterval(actualDuration)) let actionMoveDone = SKAction.removeFromParent() enemy.runAction(SKAction.sequence([actionMove, actionMoveDone])) }
se ejecuta en un nodo de una escena • A menudo se usan para cambiar la posición, rotación o escala • Algunos solo pueden ser usados en objetos SKSpriteNode
inicia cuando la anterior termina • Grupo de acciones, cada acción es ejecutada al mismo tiempo que las otras acciones • Repetición de acciones, cuando una acción se completa, se repite de nuevo
disparado o no var tapQueue = [Int]() func fireBullet() { // Creamos el sprite del laser let bullet = SKSpriteNode(imageNamed: "LaserGreen") // El laser debe salir de en medio de nuestra nave bullet.position = CGPoint(x: player.position.x, y: player.position.y + player.frame.size.height - bullet.frame.size.height / 2) // Agregamos el laser a nuestra escena addChild(bullet) // El laser va del fondo hacia arriba let actionMove = SKAction.moveTo(CGPoint(x: player.position.x, y: frame.size.height + bullet.frame.size.height / 2), duration: 1.0) let actionDone = SKAction.removeFromParent() bullet.runAction(SKAction.sequence([ actionMove, // No queremos que el usuario tire laseres indefinidamente, solo debe haber a lo mucho tres laseres por cada 60 segundos SKAction.waitForDuration(3.0 / 60.0), actionDone ])) }
touch = touches.first { if touch.tapCount == 1 { tapQueue.append(1) } } } func processUserTapsForUpdate(currentTime: CFTimeInterval) { for tapCount in tapQueue { // Queremos que solo sea un tap, no deseamos que la aplicación confunda con doble taps if tapCount == 1 { fireBullet() } tapQueue.removeAtIndex(0) } } // Usamos el método update para que cada vez que se produzca el loop solamente podamos hacer // a lo mucho tres disparos override func update(currentTime: NSTimeInterval) { processUserTapsForUpdate(currentTime) }