Vistas de página en total

lunes, 29 de agosto de 2016

Lua - Parte 3

Tablas

Las tablas son la estructura de datos más potente que tiene Lua. Pero al mismo tiempo es quizás una de las más difíciles de entender (los programadores javascript tienen ventaja en este caso, y entenderán las tablas Lua muy rápidamente).

¿Qué son tablas Lua?

Muy brevemente: las tablas Lua son objetos. O mejor dicho, son arrays asociativos, o sea, arrays donde se puede acceder a los elementos por un identificador (el cual, como veremos, puede ser numérico o no númerico). Esta primera explicación de las tablas es perfecta para programadores javascript, los cuales ya habrán entendido un porcentaje muy alto de lo que son las tablas Lua.
Para programadores que vengan de otros lenguajes, las tablas son muy parecidas a los diccionarios o mapas.
Como vamos a ver, con las tablas Lua podemos implementar arrays (indexados por índice numérico), mapas (accedidos con identificador no númerico) e incluso objetos.

Arrays

Los arrays en Lua son tablas:

    local array = { "a", "b", "c" }

Se puede acceder a los elementos con la notación típica de corchetes:

    array[2] = "b"
    var v = array[3]

Es importante indicar que los arrays en Lua empiezan con el índice 1 (no 0 como ocurre en muchos otros lenguajes de programación). Así, en la tabla anterior, el elemento 1 vale "a", el elemento 2 vale "b" y el elemento 3 vale "c".
En un array podemos guardar elementos de distintos tipos:

    local otroArray = { 1, "a", 45, "Toni" }

Se puede obtener la longitud de un array con el operador # como anticipé en la entrada anterior:

    local len = #otroArray

Por último, podemos crear un array vacío y añadirle luego los elementos:

    local array = { }
    array[1] = "a"
    array[2] = "b"
    array[3] = "c"

Podríamos incluso dejar "huecos" y entonces los elementos sin rellenar sería nil:

    array[5] = "e"
    print(array[4])     -- nil

Mapas o diccionarios

Como he dicho, con las tablas Lua también podemos implementar mapas o diccionarios:

    local socio = { nombre = "Luis", edad = 23, dni = "34756453H" }

En este caso, hemos dado un nombre a cada elemento de la tabla. Este nombre se conoce como identificador y nos permite acceder a los distintos elementos:

    socio["nombre"] = "Luis"
    var age = socio["edad"]

Como se ve, para acceder a los elementos tenemos que entrecomillar el identificador. Si no ponemos las comillas, Lua pensaría que edad es una variable. Por ejemplo:

    print(socio[edad])

La variable edad no existe, y por tanto, el resultado en la consola sería nil.
Lua también permite otra notación para acceder a los elementos por su identificador:

    print(socio.edad);
    socio.nombre = "Ramón"

De esta forma, no se ponen comillas al identificador.
Cuando queremos acceder a un elemento de un mapa de forma indirecta, entonces tendremos que utilizar la notación de corchetes de forma obligatoria:

    var element = "edad"
    print(socio[element])

En este caso, se accede al elemento socio["edad"] o bien socio.edad de forma indirecta.

Al igual que ocurre con los arrays, podemos crear un mapa vacío y añadirle elementos después:

    var socio = { }
    socio.nombre = "Luis"
    socio["edad"] = 34

Incluso, un caso más enrevesado, podemos tener una estructura de datos que sea un mapa y que tenga elementos de array (yo no recomiendo esta práctica, aunque Lua lo permite):

    var socio = { }
    socio.nombre = "Luis"
    socio[3] = "XXX"

pero en este caso, sólo podremos acceder al elemento 3 con la notación de corchetes:

    print(socio[3])      -- correcto
    print(socio.3)        -- error

El operador # para obtener la longitud de un array sólo funciona para arrays "puros", es decir, no funcionará en el caso de mapas.

Anidación

Los elementos de un tabla (o de un array) pueden ser de cualquier tipo, y por tanto, un elemento podría ser un array o tabla, permitiendo así estructuras anidadas:

    local t = { }
    t.nombre = "Luis"
    t.direccion = { }
    t.direccion.calle = "Gran Vía"
    t.direccion.poblacion = "Madrid"

Funciones como elementos de una tabla 

Aunque todavía no hemos visto en profundidad las funciones y sus características, es importante reseñar que una función puede ser un elemento de una tabla. Veamos varios ejemplos:

    local t =  { }

    t.calculo = function(a, b)  return a+b end

    function suma(a,b)
        return a + b
    end
    t.calculo = suma

En el primer caso asignamos una función inline a un elemento de una tabla, y en el segundo caso, asignamos una función existente a un elemento de una tabla.






















miércoles, 24 de agosto de 2016

Lua - Parte 2

Variables, valores y tipos

Lua es un lenguaje tipado dinámicamente. Para los que saben javascript, esto es sencillo de entender. ¿Qué significa que un lenguaje es tipado dinámicamente? Es muy sencillo. En lenguajes como Java, cuando se declara una variable hay que declarar su tipo, int, float, String o lo que sea, y esa variable sólo podrá almacenar valores del tipo declarado (o bien de una clase derivada).
En lenguajes tipados dinámicamente, como Lua, una variable puede contener un valor de cualquier tipo, o dicho más exactamente, puede apuntar a valores de cualquier tipo. Además, es posible que una variable que apunte a un valor de un tipo, más tarde apunte a un valor de otro tipo.
Por ejemplo:

    contador = 14

Estamos declarando una variable que se llama contador y que apunta a un valor de tipo numérico que vale 14. Se observa que no hemos declarado ningún tipo para la variable.
Más adelante podríamos hacer:

    contador = "43"

Ahora, la misma variable contador apunta a otro valor, esta vez de tipo string.

Tipos de datos en Lua:

  • nil - indica que la variable no ha sido inicializada (también se puede asignar nil a una variable explícitamente).
  • boolean - puede ser true o false.
  • number - cualquier número, entero o real. Lua utiliza punto flotante de doble precisión para todos los números.
  • string - cadena de caracteres.
  • function - un bloque de código que se puede invocar.
  • table - es el tipo más complejo que tiene Lua. Más adelante veremos espcíficamente las tablas.
Una variable se puede declarar en cualquier lugar simplemente asignándole un valor:

    contador = 14

Cuando se declara una variable de esta forma, tiene un ámbito global y existirá durante toda la ejecución del programa. Podremos acceder a esta variable desde cualquier punto del programa. Si queremos que el recolector de basura elimine la memoria ocupada por la variable, tenemos que asignarle nil:

    contador = nil

Se dice que el ámbito o scope de esta variable es global. Pero también existe un ámbito de bloque, por ejemplo dentro de una función:

    function calculate()
        local total = 7
    end

Al poner local, la variable total tiene ámbito de bloque: sólo existe dentro de la función, y desaparecerá cuando retorne la función. El recolector de basura eliminará la memoria ocupada por la variable cuando retorne la función (incluso aunque no le asignemos nil).
Se recomienda siempre utilizar local para las variables, excepto cuando deseemos que una variable tenga ámbito global. Cuando dentro del programa se utiliza una variable (sin usar local), Lua busca en el ámbito local para ver si existe, si no existe, busca en el bloque superior y así sucesivamente hasta llegar al ámbito global. Si no existiera, la variable se crea. El rendimiento será muy superior si declaramos todas las variables local, para evitar la cadena de búsquedas de Lua. Además, todos sabemos que las variables globales no son buenas, porque es muy fácil cometer un error y sobreescribirlas en algún lugar del programa sin darnos cuenta.
También hay que tener en cuenta que cuando declaramos una variable local en un bloque, esta variable se utiliza en el bloque aunque exista otra con el mismo nombre en un bloque externo o bien en el ámbito global. Por ejemplo:

    contador = 3
    function incrementar()
        local contador = contador + 1
    end
    -- aquí el valor de contador es 3

Hay una forma de acceder directamente a una variable global, aunque tengamos variables locales con el mismo nombre y además, evitando la cadena de búsqueda de Lua:

    contador = 3
    function incrementar()
        local contador = contador + 1
        _G.contador = _G.contador + 1
    end
    -- aquí el valor de contador es 4

Lua almacena todas las variables globales en una tabla llamada _G, por tanto podemos acceder a cualquier variable global a través de esta table.

Las variables locales de bloque no sólo se pueden utilizar dentro de una función, también se pueden utilizar en otros bloques como if o bucles.

En Lua se pueden realizar asignaciones múltiples:

    local x, y = 3, 4

Esto permite realizar hacer un swap de dos variables de una forma muy sencilla:

    x, y = y, x

Expresiones y operadores

Los operadores y expresiones en Lua son muy similares a los de otros lenguajes de programación.
Operadores matemáticos:
  • + suma
  • - resta o negativo
  • * multiplicación
  • / división
  • % módulo
  • ^ exponenciación
Operadores de comparación (retornan true o false):
  • == igualdad (si los tipos no son iguales, retorna false)
  • ~= desigualdad
  • < menor que
  • > mayor que
  • <= menor o igual que
  • >= mayor o igual que
Operadores lógicos:
  • and
  • or
  • not
Los operadores lógicos consideran que false y nil son false, y todos los demás valores son true.
Los operadores and y or hacen una evaluación con corto-circuito, es decir, si el primer valor de un and es false, no evalúa el segundo, y si el primer valor de un or es true, no evalúa el segundo.

Operador de concatenación:
  • .. concatenación de strings y números
Operador longitud:
  • # longitud de un array (veremos este operador cuando estudiemos las tablas, porque un array es una tabla en Lua)











martes, 23 de agosto de 2016

El blog de Corona SDK en español


  1. Quiero hacer apps y juegos para móviles
    1. Soluciones para el desarrollo móvil
  2. Qué es Corona
  3. Instalación
    1. Instalación de Corona
    2. Hola mundo de Corona
    3. Icono para la aplicación
  4. El lenguaje Lua
    1. Lua - Parte 1
    2. Lua - Parte 2
    3. Lua - Parte 3
    4. Lua - Parte 4
    5. Lua - Parte 5
    6. Módulos
    7. Programación orientada a objetos en Lua
  5. Diversidad de resoluciones y proporciones
    1. El problema de múltiples pantallas y proporciones
    2. Múltiples tamaños de pantalla en Corona SDK
    3. Modos de escalado en Corona SDK
    4. Mi solución para juegos y aplicaciones
    5. Escalado adaptativo


Lua - Parte 1

El lenguaje Lua

Corona SDK proporciona los APIs necesarios para desarrollar aplicaciones multiplataforma para dispositivos móviles. El lenguaje de programación para utilizar esos APIs es Lua. Por eso, necesitamos un conocimiento lo más profundo posible del lenguaje Lua si queremos desarrollar con soltura aplicaciones. Poer no hay que asustarse, en primer lugar, la sintaxis de Lua, además de ser muy similar a la de otros lenguajes (Javascript por ejemplo), es muy sencilla.

Según la web de Lua: Lua es un lenguaje de programación potente, eficiente y ligero, es un lenguaje de script embebido. Soporta programación procedural, programación orientada a objetos (aunque no de forma nativa como Java o C#), programación funcional y descripción de datos.

Lo más relevante es que Lua no es un lenguaje para escribir programas stand-alone, como lo son Java, C++, C# etc. Un programa Lua se tiene que integrar (embeber) en un programa contenedor (host). El programa host invoca al programa Lua y puede acceder a sus datos. También es posible invocar a rutinas del programa host desde Lua. En realidad, todo esto es cultura sobre Lua, porque en la práctica nosotros vamos a desarrollar 100% con Lua, y es Corona SDK quien se encarga de realizar el trabajo sucio de integrar nuestro programa Lua con los APIs para aplicaciones móviles. Corona es el programa host. Nosotros usaremos el lenguaje Lua para implementar la lógica e invocaremos los APIs de Corona para crear nuestras aplicaciones. Nada más.

Otra característica importante de Lua es que tiene un recolector de basura integrado, y por tanto, no es necesario liberar la memoria que vamos creando, se libera automáticamente cuando ya no se usa. Aunque es recomendable desreferenciar las variables que ya no se van a usar (ya veremos esto más adelante) para facilitar la tarea al recolector de basura.

Sintaxis de Lua

Lua es uno de los lenguajes de programación inspirado "más o menos" en C (como otros muchos, Java, C++, C#, Javascript, etc). Esto significa, en primer lugar, que Lua es sensible a mayúsculas y minúsculas.
Las sentencias pueden terminar opcionalmente en punto y coma.
Los nombres de variables, funciones o cualquier cosa que pueda tener nombre, son una combinación de letras, dígitos y subrayados, de cualquier longitud, Pero no pueden empezar con un dígito. Se deben evitar nombres que empiecen con subrayado, porque aunque son legales en Lua, sin embargo, por convención, Lua utiliza nombres que comienzan por subrayado para sus variables internas.
Los bloques son una serie de sentencias que se ejecutan una detrás de otra y comparten un contexto de ejecución. El bloque más común es la función:

function calculate()
    -- bloque de sentencias
end

Todas las sentencias dentro de la función son un bloque.
Otros bloques Lua son las sentencias if y los bucles.
También es posible definir bloques anónimos:

do
    -- sentencias
end

Palabras clave

Esta es la (breve) lista de palabras clave del lenguaje Lua:
  • and
  • break
  • do
  • else
  • elseif
  • end
  • false
  • for
  • function
  • goto
  • if
  • in
  • local
  • nil
  • not
  • or
  • repeat
  • return
  • then
  • true
  • until
  • while

Operadores

Los operadores en Lua son similares a los de la mayoría de los lenguajes de programación. Sin embargo, hay algunos operadores que son distintos y merece la pena mencionarlos:

  • ∼= operador distinto
  • .. concatenación de strings
  • . . . número variable de argumentos en una función

Comentarios

En Lua, como en muchos lenguajes de programación, existen dos tipos de comentarios.
Los comentarios de línea:

-- esto es un comentario hasta el final de la línea

Los comentarios multilínea:

--[[
esto es un comentario que puede abarcar varias líneas
]]--

Trazas en consola

Antes de terminar esta primera parte dedicada al lenguaje Lua, me gustaría indicar, que como en casi todos los lenguajes y entornos de programación, disponemos de una consola para sacar mensajes, trazas, etc.
La rutina que tiene Lua para sacar un mensaje en la consola es print(). Es una función global y por tanto podemos acceder a ella desde cualquier punto de nuestro programa:

    print("Hola mundo")

Pero, ¿dónde salen los mensajes? Cuando abrimos el simulador de Corona en Windows, se abren dos ventanas y una de ellas es la consola que tiene un aspecto similar a esto:
Aquí podemos ver los mensajes de print()

La función print() puede recibir múltiples argumentos separados por comas:

    print("La edad es", 27, ", y el nombre es",nombre)












lunes, 22 de agosto de 2016

Hola mundo de Corona

Una vez tenemos instalado Corona SDK, vamos a realizar un sencillo ejemplo para comprobar que todo ha ido bien y además para ver lo sencillo que es realizar una pequeña app para móvil. La desplegaremos en Android, de momento, porque el despliegue en iOS es algo más complejo y además, requiere tener una licencia de desarrollador. Esto no quiere decir que la app que vamos a crear no pueda funcionar en iOS. La app funciona perfectamente en iOS, pero no vamos a hacer el despliegue hasta más adelante.

En primer lugar, tenemos que crear un directorio en cualquier lugar de nuestro disco duro. En este directorio situaremos todos los ficheros de la aplicación.
Seguidamente, abrimos nuestro editor de texto y escribimos el siguiente programa Lua:




Aunque en este momento quizás no entendamos todo el contenido de nuestro programa, es importante teclearlo y ejecutarlo en nuestro ordenador. Al final de este capítulo daré una pequeña explicación de lo que hace (sin entrar en detalles), aunque un programador experimentado no tendrá muchas dificultades en entender qué estamos haciendo.

Guardamos el fichero con el nombre main.lua en el directorio que hemos creado. No dar otro nombre al fichero, ya que el punto de entrada de nuestra aplicación tiene que ser obligatoriamente main.lua

El siguiente paso es ejecutar nuestra aplicación en el simulador de Corona. Para ello, abrimos Corona Simulator. Pulsamos en Open, navegamos hasta el directorio donde tenemos nuestro main.lua y seleccionamos este fichero. Si todo ha ido bien se abrirá el simulador y tendremos nuestra aplicación ejecutándose. El mecanismo para arrancar el simulador es el mismo tanto en Windows como en MacOS.



Podemos cambiar el dispositivo que muestra el simulador desde el menú View > View As
Esto sólo cambia el tamaño de la pantalla del simulador, pero es muy útil para comprobar la ejecución de nuestras aplicaciones en distintos tamaños de pantalla. Por ejemplo, podemos poner iPhone 6 plus:



Antes de hacer el despliegue en Android, voy a tratar de dar una ligera explicación de lo que hace el programa.
En las líneas 1-5 creamos un rectángulo centrado en la pantalla con las dimensiones de la pantalla del dispositivo, o sea, cubre toda la pantalla. En la línea 6 ponemos color blanco a este rectángulo.
En las líneas 8-13 creamos un texto "Hola mundo..." centrado en la pantalla con un tamaño de fuente de 48 puntos. En la línea 14 damos un color rojo oscuro a este texto.
En las líneas 16-21 creamos otro texto "CORONA" un poco por debajo del texto anterior, con una fuente de 96 puntos. En la línea 22 damos un color rojo intenso a este texto. En la línea 23 hacemos que el texto parpadee continuamente.
Si el lector lo desea, puede aventurarse a hacer algunos cambios en el programa, por ejemplo, cambiar colores, posiciones, e incluso crear nuevos objetos.

Por último, vamos a la parte más deseada. Vamos a ejecutar nuestra aplicación en un móvil Android.
Si no tenemos el JDK de Java tendremos que instalarlo. Es necesario instalar el JDK, no vale el JRE para compilar la versión Android.

En el simulador de Corona, vamos al menú File > Build > Android
Nos aparecerá una pantalla donde tendremos que rellenar los siguientes datos:


  • Application name: Nombre de la aplicación. Por defecto es el nombre del directorio de nuestra aplicación, pero podemos cambiarlo.
  • Versión code: Versión de la aplicación. Es un número que tendremos que ir incrementando cuando generemos nuevas versiones. En nuestro caso, lo podemos dejar en 1. Este número será importante cuando despleguemos una aplicación en la tienda de aplicaciones de Android.
  • Version name: Versión de la aplicación, pero esta vez una cadena de caracteres, donde podemos poner algo como 1.0.0
  • Package: Identificador único de la aplicación. Aquí tenemos que poner un identificador con el formato de package java, o sea, un dominio en formato inverso seguido por un nombre de aplicación. Por ejemplo: com.joseanquiles.apps.HolaMundo
  • Target App Store: Tienda de aplicaciones donde se va a desplegar la aplicación. En nuestro caso, vamos a instalar directamente la aplicación en un móvil Android, así que seleccionaremos Google Play.
  • Keystore: Clave para firmar la aplicación. De momento utilizaremos una clave que nos genera Corona. Esta clave es suficiente de momento, Pero tendremos que generar una clave propia (ya veremos cómo) para publicar nuestra aplicación en Google Play store.
  • Key Alias: alias para la clave. De momento dejamos androiddebugkey
  • Save to folder: Directorio donde se generará el fichero .apk de la aplicación Android. Este fichero .apk es el que instalaremos en el móvil.
  • After build: Qué hacer al terminar la compilación. Seleccionar Do Nothing, para que no haga nada.

Pulsamos el botón Build para que empiece la compilación. Necesitamos conexión a internet para compilar, ya que la compilación se hace en los servidores de Corona. Esto, que pudiera parecer una molestia al principio, realmente es algo muy cómodo, sobre todo en el caso de la compilación para Android, ya que no es necesario instalar el SDK de Android en nuestro PC (algo que no es obvio habitualmente).
Al cabo de unos segundos, tendremos nuestro fichero .apk generado en el directorio que hemos indicado en las opciones de Build. Este fichero es el que tenemos que instalar en el móvil Android.

Pero antes de eso, debemos asegurarnos que en nuestro móvil hemos activado la opción de instalar aplicaciones de fuentes desconocidas. ¿Qué significa esto? Muy sencillo. Por defecto, Android sólo permite instalar aplicaciones desde la Google Play Store, por seguridad. Pero permite, si el usuario lo desea, instalar aplicaciones que provengan desde otras fuentes, por ejemplo, un fichero .apk que tengamos en nuestro móvil. Este es nuestro caso, así que tendremos que activar esta opción antes de nada. El problema es que cada versión de Android, e incluso cada fabricante de móviles, mete esta opción en un sitio distinto dentro de la aplicación Ajustes, por eso, no puedo dar el detalle de cómo hacerlo, porque no sería válido para todos los modelos. Lo mejor es hacer una búsqueda en Google indicando nuestra versión de Android. Lo normal es que esté en la aplicación de Ajustes, en la sección de Seguridad y buscar Orígenes desconocidos. Aparecerá una advertencia cuando intentamos activar esta opción.

Ahora tenemos que llevar el fichero .apk que hemos generado en nuestro PC o Mac al móvil. Para mí, la forma más sencilla es enviarlo adjunto por mail, aunque también tenemos la opción de dejarlo por ejemplo en DropBox y bajarlo desde el móvil.

Cuando pulsamos sobre el fichero .apk en el móvil (sea el adjunto del mail, sea en dropbox, o por cualquier otro medio), nos preguntará si queremos instalarlo y tras unos cuantos segundos tendremos nuestra aplicación instalada en el móvil. El icono de la aplicación lo pone Corona, pero ya veremos cómo poner un icono personalizado.

Llegó el momento, sólo tenemos que pulsar sobre el icono de nuestra aplicación y tendremos nuestra primera aplicación corriendo sobre el móvil.

Vuelvo a recordar que ahora no vamos a hacer el despliegue en iOS, lo haremos más adelante, pero la idea es similar al despliegue en Android. Lo importante es tener claro que el mismo main.lua, sin NINGUNA modificación se puede ejecutar en un iPhone o iPad.












martes, 2 de agosto de 2016

Instalación de Corona

Existen dos versiones del simulador, una para Windows y otra para MacOS. Con la versión para Windows podremos ejecutar nuestro programa en el simulador y podremos generar la versión para Android únicamente (no podremos generar la versión para iOS en Windows debido a restricciones de Apple). Con la versión para MacOS igualmente podremos ejecutar nuestro programa en el simulador y generar la versión para Android, pero además, podremos también generar la versión para iOS. Por lo tanto, si necesitamos generar para iOS tendremos que disponer de un ordenador con MacOS. Vale cualquier modelo, ya que Corona no tiene unos requisitos especiales. También existe la opción de alquilar un Mac en la "nube". Por ejemplo MacinCloud permite alquilar un Mac y trabajar de forma remota en él. Los precios son bastante razonables, como por ejemplo, 1 dólar por hora o 20 dólares al mes, sobre todo si sólo lo necesitamos para generar la versión para iOS (algo que podemos realizar en unos pocos minutos, ya que el desarrollo lo podemos hacer prácticamente en su totalidad en un PC Windows).

También es importante indicar que para generar el APK de Android no necesitamos instalar el SDK de Android, ya que Corona se encarga de generar nuestro APK remotamente (como ya veremos). Esto nos ahorra muchas complicaciones y seremos capaces de hacer nuestro primer programa para Android en pocos minutos. Sin embargo, para generar para iOS es necesario instalar XCode, el IDE de Apple (el cual es gratuito).

Antes de instalar Corona, es necesario instalar un editor de texto para editar los ficheros Lua. En principio vale cualquier editor, por ejemplo, Notepad++ en el caso de Windows, y TextEdit en el caso de Mac. Sin embargo, yo recomiendo Sublime Text, un editor muy potente, multiplataforma, que además tiene un plugin especial para Corona SDK. Con este plugin tendremos opciones de autocompletado, no sólo para Lua, sino también para el API de Corona. Además, podremos lanzar y depurar nuestros programas desde el propio editor. No es un editor gratuito, pero realmente puede merecer la pena. He leído en algún sitio que la versión de evaluación de Sublime la renuevan indefinidamente si se va solicitando cada vez que caduca, pero esto sólo es un rumor.

Lo primero que tenemos que hacer para trabajar con Corona es instalar el simulador.

Instalación de Corona en Windows

Entramos en la web de Corona: https://coronalabs.com/, introducimos nuestro mail (1), para que ellos sepan quién se ha descargado Corona y pulsamos en Download Free SDK (2).


Si no nos hemos registrado antes, es el momento. Para registrarnos simplemente tendremos que dar una cuenta de mail y una clave.

Inmediatamente entraremos en la página de descargas. Seleccionaremos la versión para Windows (1) y pulsando el botón Download (2) se descargará el fichero .msi instalador para Windows. 

En la página de descargas también tenemos disponibles para descargar las versiones que ellos llaman Daily builds. Son versiones últimas de lo que están desarrollando ahora mismo. Normalmente no es necesario utilizar estas versiones, y vale con la versión oficial. Pero en algunas ocasiones añaden alguna funcionalidad muy importante o corrigen algún error que para nosotros es importante, y entonces sí merece la pena utilizar la última Daily build y no esperar a que saquen la siguiente versión oficial (que suele ser cada varios meses).

El siguiente paso es instalar Corona en nuestro PC. Para ello, damos doble click sobre el fichero .msi que hemos descargado. Daremos permiso para ejecutar el instalador:


Seguiremos las instrucciones del instalador paso a paso, ya que no hay opciones importantes, salvo el directorio de instalación, que dejaremos el directorio por defecto.

Y ya lo tenemos. Es muy sencillo instalar Corona SDK para Windows, como hemos visto. En la siguiente entrada del blog realizaremos un sencillo ejemplo para comprobar que todo ha ido bien.

Instalación de Corona en MacOS

Entramos en la web de Corona: https://coronalabs.com/, introducimos nuestro mail (1), para que ellos sepan quién se ha descargado Corona y pulsamos en Download Free SDK (2).


Si no nos hemos registrado antes, es el momento. Para registrarnos simplemente tendremos que dar una cuenta de mail y una clave.

Inmediatamente entraremos en la página de descargas. Seleccionaremos la versión para Mac (1) y pulsando el botón Download (2) se descargará el fichero .dmg instalador para MacOS. 



En la página de descargas también tenemos disponibles para descargar las versiones que ellos llaman Daily builds. Son versiones últimas de lo que están desarrollando ahora mismo. Normalmente no es necesario utilizar estas versiones, y vale con la versión oficial. Pero en algunas ocasiones añaden alguna funcionalidad muy importante o corrigen algún error que para nosotros es importante, y entonces sí merece la pena utilizar la última Daily build y no esperar a que saquen la siguiente versión oficial (que suele ser cada varios meses).

El siguiente paso es instalar Corona en nuestro Mac. Para ello, damos doble click sobre el fichero .dmg que hemos descargado y aceptamos la licencia:


Arrastramos Corona SDK a la carpeta de Aplicaciones:


Y ya lo tenemos. Es muy sencillo instalar Corona SDK para MacOS, como hemos visto. En la siguiente entrada del blog realizaremos un sencillo ejemplo para comprobar que todo ha ido bien.