En esta serie, te enseñaré cómo crear un juego inspirado en Space Invaders usando Sprite Kit y el lenguaje de programación Swift. A lo largo del camino, aprenderá sobre el motor de física integrado de Sprite Kit, generará partículas utilizando el editor de partículas incorporado de Sprite Kit, usará el acelerómetro para mover el reproductor y mucho más. Empecemos.
Sprite Kit es el motor de juego 2D de Apple que se presentó junto con iOS 7. Con la introducción del lenguaje de programación Swift en 2014, nunca ha habido un mejor momento para ser un desarrollador de juegos para iOS.
Sprite Kit proporciona un motor de renderizado construido sobre OpenGL. Con el uso de sprites texturizados, un motor de física incorporado y el muy potente SKAcción
clase, puedes construir muy rápidamente juegos 2D funcionales.
Sprite Kit, como la mayoría de los motores de juegos, utiliza un bucle de renderizado para renderizar y actualizar la pantalla. El bucle de renderizado tiene varios pasos que debe seguir antes de renderizar la escena actual. Son los siguientes:
Cada uno de estos tiene un método correspondiente que puede utilizar para aplicar cualquier lógica adicional que deba tener lugar en ese momento dentro del marco. Específicamente, usarías los siguientes métodos dentro de la escena.
actualizar
didEvaluateActions
didimular la física
didApplyConstraints
didFinishUpdate
Estamos interesados en dos de estos métodos para este tutorial., actualizar
y didimular la física
. Usaremos el actualizar
método para mover los invasores manualmente y la didimular la física
Método para actualizar el reproductor, que se controlará mediante el acelerómetro y el motor de física..
SKNode
Uno de los bloques de construcción del marco Sprite Kit es el SKNode
clase. los SKNode
La clase no dibuja ningún activo visual. Su función principal es proporcionar un comportamiento de referencia que implementan otras clases. los SKScene
clase es el nodo raíz en un árbol de SKNode
instancias y se utiliza para contener sprites y otro contenido que necesita ser renderizado.
La renderización y animación se realiza mediante un SKView
La instancia se coloca dentro de una ventana y luego se le agregan otras vistas. los SKScene
instancia se agrega a la SKView
ejemplo. Puedes usar una sola SKView
Instale en su ventana y cambie entre diferentes escenas en cualquier momento..
El marco define una serie de SKNode
subclases El más común para construir una escena es el SKSpriteNode
clase. los SKSpriteNode
clase se puede dibujar ya sea como un rectángulo con una SKTexture
mapeado en él o como un rectángulo coloreado, sin texturizar. La mayoría de las veces usarás sprites texturizados, porque así es como darás vida a tu obra de arte en tu juego. Echa un vistazo al árbol de herencia de la SKNode
clase para ver qué otros tipos de nodos están disponibles.
SKAcción
los SKAcción
clase es lo que trae tu SKNode
Clases a la vida. Utilizando el SKAcción
En la clase puede mover, rotar, escalar y desvanecer los nodos. También puedes usar SKAcción
Para reproducir un sonido y ejecutar código personalizado. los SKAcción
La clase es muy poderosa y, junto con la SKNode
clase, es uno de los bloques de construcción de un juego de Sprite Kit.
Sprite Kit tiene un motor de física integrado que facilita el manejo de situaciones físicas complejas. Si alguna vez ha intentado implementar un motor de física por su cuenta, apreciará esta característica.
En Sprite Kit, la coordenada. (0,0)
se encuentra en la parte inferior izquierda de la pantalla en lugar de la parte superior izquierda, a la que puede estar acostumbrado si ha trabajado con Flash, Corona, HTML5 Canvas y muchos otros marcos de juegos. Esto se debe a que Sprite Kit utiliza OpenGL debajo del capó..
Le sugiero que lea la Guía de programación de Sprite Kit de Apple para familiarizarse con los conceptos anteriores. Con esta breve introducción fuera del camino, comencemos a construir un juego con Sprite Kit.
Abre Xcode y elige Crear un nuevo proyecto Xcode o elegir Nuevo> Proyecto ... desde el Expediente menú.
Asegúrese de que está apuntando iOS,que el tipo es Solicitud, y que has elegido Juego como el tipo de plantilla. Hacer clic Siguiente continuar.
A continuación, elija lo que desee para el nombre del producto, Nombre de la Organización, y Identificador de organización. Asegúrate de eso Idioma se establece en Rápido, Tecnologia de juego se establece en SpriteKit, y Dispositivos se establece en iPad. Especifique una ubicación para guardar los archivos del proyecto y haga clic en Crear.
Si hace clic en el botón Ejecutar en la parte superior izquierda (o presiona Comando-R), Xcode construirá y ejecutará su aplicación, mostrando el texto "¡Hola Mundo!". Cuando tocas la pantalla, se agrega una imagen de una nave espacial y comienza a rotar.
Seleccione el proyecto en el Navegador de proyectos y abre el General pestaña en la parte superior. Debajo Información de implementación, desmarque todas las casillas de verificación pero Retrato para Orientación del dispositivo.
A continuación, seleccione y elimine GameScene.sks. los .sks archivo le permite diseñar la escena visualmente. Para este proyecto, agregaremos todos los nodos programáticamente. Abierto GameViewController.swift, borrar su contenido, y reemplazarlo con el siguiente.
importar UIKit importar clase SpriteKit GameViewController: UIViewController override func viewDidLoad () super.viewDidLoad () let scene = StartGameScene (size: view.bounds.size) let skView = view as! SKView skView.showsFPS = true skView.showsNodeCount = true skView.ignoresSiblingOrder = true scene.scaleMode = .ResizeFill skView.presentScene (scene) sobrescribir func prefersStatusBarHidden () -> Bool return true
los GameViewController
clase hereda de UIViewController
y tendrá un SKView
como su punto de vista. Dentro de viewDidLoad
método, forzamos su baja ver
propiedad a un SKView
instancia, utilizando el como!
Escriba el operador de conversión y configure la vista..
Es posible que haya notado el texto en la esquina inferior derecha de la pantalla cuando ejecutó la aplicación por primera vez. Eso es lo que el showsFPS
y showsNodeCount
Las propiedades son para, mostrando los cuadros por segundo a los que se está ejecutando el juego y el número de SKNodes
visible en la escena.
Si algunos de los nodos se movieran fuera de la pantalla, el recuento de nodos disminuiría, pero aún estaría en la memoria. Es importante recordar esto y no permita que el conteo de nodos lo engañe. Si agrega 100 nodos a una escena y 90 de ellos están fuera de la pantalla, todavía tiene 100 nodos ocupando memoria.
Para fines de optimización, la ignoraSiblingOrder
se establece en cierto
. Puedes leer más sobre esto en la Guía de programación de Sprite Kit. Lo último que hacemos es invocar el SKView
es presenteScene
método y pasar en el StartGameScene
, que crearemos en el siguiente paso.
Por último, no queremos que se muestre la barra de estado, por lo que volvemos cierto
desde el preferStatusBarHidden
método.
StartGameScene
StartGameScene
ClaseEscoger Nuevo > Expediente… desde el Expediente menú y elegir Clase de Cocoa Touch desde el iOS> Fuente sección. Hacer clic Siguiente continuar.
A continuación, nombre la clase StartGameScene y asegúrese de que hereda de SKScene
. Idioma debe establecerse en Rápido. Hacer clic Siguiente continuar.
Indique a Xcode dónde desea guardar el archivo para la nueva clase y haga clic en Crear. Agregue el siguiente código a StartGameScene.swift.
importar UIKit importar SpriteKit clase StartGameScene: SKScene función de reemplazo didMoveToView (ver: SKView) backgroundColor = SKColor.blackColor () NSLog ("Hemos cargado la pantalla de inicio")
los didMoveToView (_ :)
El método se llama inmediatamente después de que la escena es presentada por la vista. En general, aquí es donde realizarás la configuración de tu escena y crearás tus activos..
Si prueba el juego ahora, se le presentará una pantalla negra que muestra la velocidad de cuadros y el número de nodos en la esquina inferior derecha de la pantalla..
startGameButton
No es divertido mirar una pantalla negra, así que vamos a crear nuestro primer SKSpriteNode
ejemplo. Actualizar el didMoveToView (_ :)
método como se muestra a continuación.
override func didMoveToView (ver: SKView) let startGameButton = SKSpriteNode (imageNamed: "newgamebtn") startGameButton.position = CGPointMake (size.width / 2, size.height / 2 - 100) startGameButton.name = "startgame" )
Declaramos una constante startGameButton
usando el inicializador de conveniencia init (imageNamed :)
, que toma como argumento el nombre de la imagen. Lo centramos en la pantalla tanto horizontal como verticalmente, excepto que restamos 100 puntos para colocarlo un poco descentrado en el eje vertical. Establecemos su nombre
propiedad a empezar juego para que podamos referirnos a él más tarde. Por último, lo añadimos a la escena invocando. addChild (_ :)
, que toma como argumento el nodo para añadir a la escena. Puedes aprender más sobre el SKSpriteNode
clase en la referencia del SpriteKit Framework.
Ahora sería un buen momento para agregar las imágenes al proyecto. Descargue los archivos de origen de este tutorial y encuentre la carpeta llamada imagenes. Arrástrelo a la carpeta que tiene el nombre de lo que nombró su proyecto, por ejemplo, MobileTutsInvaderz. Asegurarse Copia artículos si es necesario Se comprueba, así como el objetivo principal en la lista de objetivos.
Si prueba su aplicación, debería ver un botón etiquetado "Nuevo juego".
toquesBegan
A continuación, necesitamos implementar el TocaBegan (_: conEvento :)
método. Su implementación se muestra a continuación. los toquesBegan
El método se invoca cuando uno o más dedos tocan la pantalla..
anular func toques Empiezan (toques: Establecer, Evento withEvent: UIEvent) let touch = touches.first as! UITouch deja que touchLocation = touch.locationInNode (self) letToNodeNode = self.nodeAtPoint (touchLocation) if (extractoNombre.nombre == "startgame") deja que gameOverScene = GameScene (tamaño: tamaño) gameOverScene.scaleMode = scaleMode permite de tipo de transición = Tipo de posición. Vista flipHorizontalWithDuration (1.0)? .presentScene (gameOverScene, transition: transitionType)
los multiTouchEnabled
propiedad de la vista de la escena se establece en falso
de forma predeterminada, lo que significa que la vista solo recibe el primer toque de una secuencia multitáctil. Con esta propiedad desactivada, puede recuperar el toque usando el primero
propiedad computada de la toques
conjunto ya que solo hay un objeto en el conjunto. Nótese que también lo rebajamos a una UIT
.
Almacenamos la ubicación del toque en la escena en una constante llamada localización táctil
. Hacemos esto invocando locationInNode (_ :)
sobre el toque
Objeto, pasando en la escena. Entonces podemos averiguar qué nodo fue tocado invocando nodeAtPoint
, pasando por la localización táctil. Con este nodo Nodo tocado
encontrado, podemos revisar el nombre
propiedad y, si es igual a empezar juego, sabemos que pulsaron el botón.
Si el usuario pulsó el botón, instanciamos GameScene
clase y establecer su scaleMode
para ser el mismo que el modo de escala de la escena actual. Entonces creamos un SKTransition
llamado tipo de transición
y mostrar la escena invocando. presenteScene (_: transición :)
pasando en el juegoOverScene
y el tipo de transición
.
Hay unos cuantos SKTransistion
tipos para elegir. Puedes leer más sobre ellos en la Referencia del Marco SpriteKit. Le sugiero que pruebe algunos y vea cuáles le gustan más.
Si prueba su aplicación, puede tocar el botón, que lo lleva a la GameScene
. Esta es la misma escena con la que comenzó inicialmente el proyecto..
Esto cierra la primera parte de esta serie. Se le ha presentado Sprite Kit y ha aprendido a crear escenas personalizadas, use el SKSpriteNode
Clase, y detectar toques. Esto es solo el comienzo, todavía tenemos mucho que aprender. Gracias por leer y nos vemos en la siguiente parte de esta serie..