miércoles, 14 de mayo de 2014

Corona SDK - Juego de naves (I) : Introducción, Elección de la herramientas y el lenguaje Lua.

Introducción


  Hoy en día dado el auge de las aplicaciones para dispositivos móviles, existe una gran cantidad de herramientas para los desarrolladores para facilitar el trabajo y es muy importante elegir correctamente la tecnología a usar para nuestro proyecto ya que esto nos facilitará mucho las cosas.

 Elección de la herramienta


  Una vez tengamos nuestra idea bien detallada nos podemos poner en la
búsqueda de las herramientas necesarias para desarrollar nuestra idea. Sin embargo el abanico de herramientas es, por suerte, muy amplio y podremos vernos desbordados sin saber cual elegir.

  Existen multitud de cuestiones que debemos tener en cuenta para esta elección, por ejemplo:

  • Desarrollar para una plataforma concreta o que sea multi-plataforma.
  • Que la curva de aprendizaje sea mínima o disponemos del tiempo suficiente para aprender a usarlo. 
  • Elegir entre gráficos 2D o gráficos 3D.
  • Trabajar con modelos 3D de objetos o con imágenes planas.
  • Que sea gratis o contamos con una apoyo económico y podemos permitir pagar cierta cantidad para el uso de la herramienta.
  • Que esté bien documentado o cuente con un refuerzo importante por parte de la comunidad ya que esto puede reducir considerablemente el tiempo de desarrollo. 
  • Y otras muchas cuestiones relativas a nuestro proyecto y más personales como puede ser: el acceso a los componentes físicos del dispositivo (acelerómetro, cámara, etc), conectividad a internet (con facebook, twitter, etc), manejo con las bases de datos, etc.
  No es necesario que la herramienta cumpla con todos los puntos pero si que cubra el máximo de ellos y que las ventajas superen a los inconvenientes de manera personal.

  Estas son algunas de las herramientas que podemos encontrar por el mercado:

-  Unity3D : un motor de videojuegos 2D/3D muy popular y con una potencia extraordinaria tanto para juegos 2D o 3D. Además con la ultima actualización podemos publicar nuestra aplicación para dispositivos moviles de forma gratuita.

-  Cocos-2D : es un framework muy enfocado a la creación de juegos 2D. Tiene la peculiaridad de que si queremos desarrollar juegos para una plataforma distinta a IOs debemos hacerlo en C++ y pelearnos con los punteros tipicos de este lenguaje para la gestión de escenas.

-  Corona : un framework enfocado tanto a la creación de juegos como a la de apps de de todo tipo. Esto último es posible gracias a que podemos incluir bibliotecas como OpenGL, Facebook Connect o Google Maps entre otras.

-  AddEngine : motor de juegos de codigo abierto con el cual podremos desarrollar nuestra aplicaciones en Java. Tambien posee MultiTouch o Red multijugador entre otras características. Sin embargo cuenta con una excasa documentación oficial teniendo que recurrir a los foros para dar con las soluciones a nuestros peores problemas.

  Sin embargo para este blog y en esta ocasión nos quedaremos con Corona ya que en mi opinión nos ofrece la posibilidad de elaborar un juego 2D potente y de forma muy sencilla, abstrayendonos casi por completo de los detalles de más bajo nivel.


LUA


  El lenguaje utilizado para desarrollar en Corona es Lua. El objetivo de este blog no es aprender este lenguaje sin embargo combiene dar algunas menciones especiales:

  Lua es un lenguaje no tipado, es decir en una variable podemos almacenar cualquier elemento ya sean datos o funciones. La forma de declarar una variable es la siguiente:

-  Local nombreVariable : si queremos definir la variable de forma local al módulo o función en la que estamos trabajando.
-  _G.nombreVariable : si queremos definir una variable de forma global. Tambien se puede definir una variable global sin nada delante, es decir:

-  nombreVariable

  Sin embargo una vez se interprete esta sentencia esta variable será introducida igualmente en la tabla _G produciendo el mismo resultado. Por tanto es recomendable utilizar la primera forma para distinguir cuando queremos declarar una variable global de cuando se nos ha olvidado poner "local" delante de una variable.

  En mi opinión esta forma de declarar variables globales es un tanto peligrosa ya que existen palabras reservadas para algunas variables del entorno o  bibliotecas específicas de Corona en la tabla _G y si tuviéramos la suerte de declarar nosotros alguna variable con el mismo nombre de alguna de estas variables reservadas, machacaríamos su valor y podríamos provocar errores indeseados. Por ejemplo:

  _G.debbug = "lo que sea"

 Esto provocaría machacar la biblioteca que usa Corona para los mensajes de depurarción y errores mostrados por consola.

  Mi consejo sería definirnos nosotros nuestra propia tabla de variables globales en un modulo aparte, por ejemplo globalVar.lua, y cuando quisiéramos utilizar alguna variable en otro modulo, importemos el módulo globalVar.lua mediante la sentencia require("globalVar.lua") para acceder a dicha tabla.

  En Lua existe un tipo especial llamado "table". Las tablas son colecciones de objetos con la característica de que podemos indexar la tabla de la forma tradicional mediante indices o mediante entradas de tabla:

-  local t = {4, 5} -- nos crea una tabla de dos elementos
   print(t[1]) -- imprime 4

-  local t = {}
   t.usuario = "Juan" -- esto crearía una entrada con el nombre "usuario"  
   print(t.usuario) -- imprime Juan

  Como podemos observar una característica importante de esta colección es que el índice del primer elemento es "1".

  Para más información sobre este lenguaje podemos consultar el siguiente enlace para la documentación oficial sobre Lua 5.1:

http://www.lua.org/manual/5.1/es/manual.html

No hay comentarios:

Publicar un comentario