Home » Análisis » SpriteKit 2.0, todas sus novedades para iOS 8
SpriteKit 2

SpriteKit 2.0, todas sus novedades para iOS 8

SpriteKit es el primer framework realizado por Apple para iOS, cuyo objetivo es crear juegos. Fue presentado el pasado año como una de las más importantes novedades de iOS 7 y desde entonces, muchos juegos casuales de los que han pasado por la Apple App Store, lo han utilizado como base.

SpriteKit no es más que la adaptación o versión (como se quiera llamar) de Apple de Cocos2D, del que ya hemos hablado aquí, incorporando además la facilidad de integrarse mucho mejor con Cocoa Touch. De hecho, parte del equipo que trabajó con Cocos2D trabaja en Apple para este nuevo framework y su estructura es muy similar. Las diferencias más notables es que SpriteKit permitía integrar el motor de física de objetos directamente sobre Objective-C y sobre sus propios objetos, cosa que Cocos2D no hacía en la versión que en ese momento era la actual.

El editor de escenas

Si hay una novedad que destaca por encima del resto, es la posibilidad de usar un editor de escenas de SpriteKit visual, al estilo del creador de Storyboard, que está integrado en Xcode y que además permite simular el funcionamiento de la pantalla sin necesidad de compilar o ejecutar el juego.

SpriteKit Editor

El editor es capaz de mostrarnos todos los gráficos que están incorporados al juego como texturas, recupera las fuentes personalizadas que hayamos incluido y nos permite usarlas, además de permitirnos crear y trabajar con muchas de las interesantes novedades que veremos a continuación: todas y cada una de ellas pueden definirse y usarse en este nuevo editor sin necesidad de introducir ni una sola línea de código.

Sin duda, un añadido más que interesante y que podríamos decir que es la versión de Apple de SpriteBuilder, la herramienta para Cocos2D v3 que cumple una función similar.

Novedades

Esta nueva versión tiene importantes incorporaciones, sobre todo en cuanto a tema de física de objetos, principalmente gracias a la incorporación de SceneKit al framework completo.

SpriteKit ahora permite el uso de shaders personalizados, bien a través de cadenas o de ficheros .fsh. Incluso podremos con Xcode ver el resultado en tiempo real de estos shaders y adaptar su código como queramos, o definir uniforms que modifiquen su comportamiento (aparte de usar los que vienen por defecto). Usan un nuevo tipo SKShaders y pueden usarse con sprites, formas, partículas, efectos o una escena completa.

La incorporación de luces es otra de las grandes novedades, podremos usar hasta 8 luces por sprite y además tenemos una forma automática de generar mapas normales de texturas que le den relieve y un pequeño efecto 3D que de aún más realismo al efecto. Jugando con las máscaras de luces y objetos podemos hacer que determinados objetos en pantalla no permitan atravesar la luz y generen sombras: todo ello sin codificar una sola línea y de manera automática.

El nuevo motor de física de objetos incorpora una novedad muy importante: colisiones de pixel perfecto. Con unas pocas líneas, creamos un objeto cuya forma sea definida por el canal alfa del mismo, lo que conseguirá una definición de objeto físico perfecto y automático. Basta usar el ejemplo a continuación:

Una importante novedad para ayudar a la lógica de juegos son las restricciones (constraints). Estas, unidas a uno o varios nodos, permiten controlar su comportamiento de manera automática, en cuanto a posición, orientación, distancia y activación o no del mismo (si está enabled o disabled). A partir de restricciones matemáticas, podemos (por ejemplo) impedir que un objeto salga de un cuadro de unas determinadas dimensiones o que no pueda rotar más allá de unos grados o que no pueda unirse a otro objeto o alejarse en más de x puntos. Todo ello asociando la restricción y dejando que SpriteKit haga el resto solo.

Llevando más allá este concepto, SpriteKit permite hacer cinemática inversa, o lo que es lo mismo, animaciones compuestas de grupos padres e hijos de sprites, donde el comportamiento de uno implica al otro a través de puntos de unión que provocan rotación o movimiento compuesto. Este concepto es muy conocido para quien haya trabajado con herramientas como Adobe Flash o Spine y es la base del concepto de la animación esquelética 2D.

Por ejemplo, si tenemos un personaje que tiene hombro, brazo, antebrazo y mano, podemos unir uno al otro y cuando la mano se mueva hacia arriba, el resto acompañarán el movimiento. De esta forma, podemos construir personajes complejos con animación avanzada, de forma similar a cómo funcionan los personajes en 3D. La cinemática puede generarse por programación o a través del nuevo editor de SpriteKit, donde podremos incluso probar las uniones y su consistencia sin necesidad de ejecutar el programa.

Inverse Kinematic

Los campos físicos es otra gran función que puede usarse con casi cualquier nodo o incluso partículas. Definimos regiones en nuestra escena y diferentes tipos de fuerzas en función del tipo de campo para conseguir efectos automáticos en objetos. Podemos hacer que un objeto repela a otro al pasar a su lado, o que lo atraiga, que orbite a su alrededor o que note el efecto de gravedad cuanto más se acerque a él. Pueden crearse campos magnéticos o incluso eléctricos donde en función de la polaridad que definamos a cada elemento estos se atraerán o repelerán en función de su carga (este último permite hacer con partículas un sistema dinámico de atractor de Lorenz bastante curioso).

Por último, aunque ya lo habíamos adelantado, la última gran incorporación es que SpriteKit viene integrado con SceneKit, el framework de juegos 3D basado en OpenGL ES que hasta ahora solo estaba presente en OS X. Podemos crear nodos 3D con un tamaño determinado, cargar objetos 3D de ficheros estándar .dae (de Collada) o .abc (del motor LithTech de juegos 3D) e incorporarlos a nuestra vista. Luego podemos modificar fácilmente sus propiedades de posición, cámara, etc. Incluso podríamos, en un juego ya hecho, sustituir un sprite 2D por otro 3D y con un poco de control conseguir un efecto bastante llamativo.

El motor de SceneKit está perfectamente integrado de forma que muchos de los nuevos efectos de SpriteKit como la generación de mapas normalizados de texturas, las nuevas funciones de generación de atlas o incluso el control multimedia de archivos de audio, dependen directamente de él.

Pequeños cambios

El más importante es que el vemos a continuación: el ciclo de update de SpriteKit se ve ampliado con dos nuevos ciclos: la evaluación de las restricciones y el callback que se lanza cuando estas ya se han evaluado correctamente.

Update Loop SpriteKit

Ahora también pueden generarse texturas mutables que nos permiten generar estas desde datos brutos, incluso provenientes de bloques de código. O incluso texturas de ruido coherente o vectorial a partir de una esfera, soportando escala de grises o salida a color además de controlar la suavidad de la propia textura (el smoothness).

El motor de física permite crear puntos de unión en cuerpos físicos, de forma que podemos poner “un clavo” de sujeción de un elemento para que este limite su movimiento por esa restricción, incluso haciendo uniones múltiples y permitiendo o no la rotación de los objetos unidos.

Podremos crear formas complejas como nodos, a través de un nuevo objecto SKShapeNode que permitirá dibujar círculos, cuadrados, elipses o incluso trazos que además nos pueden permitir unirlos para crear formas más complejas.

Por último, SpriteKit ahora puede crear texturas de hasta 4096×4096 y además permite el uso de otros modos RGB como los RGBA4444, RGBA565, RGBA5551 además del ya usado RGBA8888. Permite atlas de texturas en 16 y 32 bits, diferentes sets para Retina o No-Retina y además pueden generarse atlas de texturas en tiempo de ejecución con un nuevo tipo SKTextureAtlas.

Toda una revisión y puesta al día

Como podéis ver, no son pocas las novedades de SpriteKit, contando además que es plenamente compatible con Swift, de forma que podemos desarrollar nuestro juego en este nuevo lenguaje con total garantía que el framework va a funcionar a la perfección con él.

Swift Playground

Incluso, podemos usar los nuevos PlayGround, para hacer pruebas de lógica de juegos que veremos como funcionan sin ejecutar nada (desde el propio visualizador) y que nos permitirán ver todo tipo de gráficas de rendimiento y valores que nos ayudarán a depurar nuestro código.

Y sí, SpriteKit también formará parte de nuestra web. Estamos preparando muchas cosas y vendrá poco a poco, con la calidad necesaria para ser bien aprovechado. Hasta entonces, Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Análisis, Google lanza Android O para desarrolladores

Google ha lanzado hoy la nueva versión de Android (previa para desarrolladores), Android O. Analizamos sus novedades y cambios más importantes en profundidad. Cambios que mejoran la seguridad, la eficiencia energética con un curioso sistema de limitación de tareas en segundo plano que recuerda un poco al que usa iOS desde sus orígenes y muchos más cambios que hacen a Android una plataforma cada vez más madura.