miércoles, 11 de junio de 2014

Cancelar transiciones en corona sdk

Hola,

Me topé con un problema en las transiciones de objetos infinita en corona sdk. Al salir del juego e ir al menú principal, o reiniciar el nivel, marcaba un error porque no se había terminado bien la transición de los objetos.

Los objetos en este ejemplo son nubes, que al salir de la pantalla vuelven a aparecer al inicio, cambiando su posición y velocidad aleatoria mente.

Usando storyboard, el código seria de esta manera:
Tenemos la generación de las nubes y su transición, al terminarla, se vuelve a generar el objeto con el mismo id y a iniciar la transición, para así continuar de manera infinita, todo esto lo tengo dentro del método scene:createScene del storyboard.

   
      clouds ={  
       {getImage = "images/cloud01.png"},   
       {getImage = "images/cloud02.png"},  
       {getImage = "images/cloud03.png"}  
      }  
      local returnClouds = function( obj )  
        if ( obj.moveTrans ) then  
                transition.cancel( obj.moveTrans )  
                obj.moveTrans = nil  
                makeClouds(obj.id)  
           end  
      end  
      function makeClouds(id)  
           imagesId = math.random (1,3)  
           local cloud = display.newImage(clouds[imagesId].getImage  )  
           cloud.x = math.random (display.screenOriginX , centerX )  
           cloud.y = math.random (topScrn + cloud.height, centerY)  
           cloud.alpha = 0.7  
           cloud.id=id  
           group:insert(cloud)  
           allClouds[id] = cloud  
           cloud.moveTrans = transition.to( cloud, {time = math.random (30000 , 120000), x = w + 300, onComplete=returnClouds } )  
      end  
      for i=0,2 do  
           makeClouds(i)  
      end  

El método de returnClouds es donde se cancela la transición, en este caso para iniciarla nuevamente.

La variable de allClouds se agrego como variable global, al inicio del proyecto, para así poder tener todas las nubes en el método de scene:exitScene del storyboard.

 local allClouds = {}  

Esto genera las nubes, su transición y el reinicio al llegar al final de la pantalla. Ahora para la cancelación de la transición y que no genere problemas, debe cancelarse en el método de scene:exitScene del storyboard.
El código para este ejemplo seria:

 -- Called when scene is about to move offscreen:  
 function scene:exitScene( event )  
      local group = self.view  

      for i = 0, #allClouds do  
           local obj = allClouds[i]  
           if ( obj.moveTrans ) then  
                transition.cancel( obj.moveTrans )  
                obj.moveTrans = nil  
           end  
      end  
      -- INSERT code here (e.g. stop timers, remove listeners, unload sounds, etc.)  
      -- Remove listeners attached to the Runtime, timers, transitions, audio tracks  
 end  

Espero les pueda ayudar en algo!

El código de la generación de nubes esta basado en el utilizado en este blog:
http://www.christianpeeters.com/rolly-bear-world/
Recomendado por cierto!

martes, 6 de mayo de 2014

Ordenar objeto JSON alfabéticamente por cualquier atributo

Me topé con una situación en la que necesitaba ordenar un JSON alfabéticamente, una vez mas, StackOverflow me sacó del apuro.
La opción mas votada esta muy buena, puedes ordenar por cualquier atributo y en cualquier orden.
Les dejo el link a esta respuesta:
http://stackoverflow.com/a/4698083

 function sortJsonArrayByProperty(objArray, prop, direction){  
   if (arguments.length<2) throw new Error("sortJsonArrayByProp requires 2 arguments");  
   var direct = arguments.length>2 ? arguments[2] : 1; //Default to ascending  
   if (objArray && objArray.constructor===Array){  
     var propPath = (prop.constructor===Array) ? prop : prop.split(".");  
     objArray.sort(function(a,b){  
       for (var p in propPath){  
         if (a[propPath[p]] && b[propPath[p]]){  
           a = a[propPath[p]];  
           b = b[propPath[p]];  
         }  
       }  
       // convert numeric strings to integers  
       a = a.match(/^\d+$/) ? +a : a;  
       b = b.match(/^\d+$/) ? +b : b;  
       return ( (a < b) ? -1*direct : ((a > b) ? 1*direct : 0) );  
     });  
   }  
 }  
 sortJsonArrayByProperty(results, 'attributes.OBJECTID');  
 sortJsonArrayByProperty(results, 'attributes.OBJECTID', -1);  
En las ultimas 2 lineas se manda llamar la funcion de orden ascendente y descendente, ordenandolo por el OBJECTID

Teniendo el JSON de ejemplo:

 {"results": [  
  {  
   "layerId": 5,  
   "layerName": "Pharmaceutical Entities",  
   "attributes": {  
    "OBJECTID": "35",  
    "FACILITYTYPE": "Pharmacy",  
    "FACILITYSUBTYPE": "24 Hr Pharmacy",  
    "COMMERCIALNAME_E": "SADD MAARAB PHARMACY",  
    },  
   "geometryType": "esriGeometryPoint",  
   },  
  {  
   "layerId": 5,  
   "layerName": "Pharmaceutical Entities",  
   "attributes": {  
    "OBJECTID": "1",  
    "FACILITYTYPE": "Pharmacy",  
    "FACILITYSUBTYPE": "24 Hr Pharmacy",  
    "COMMERCIALNAME_E": "GAYATHY HOSPITAL PHARMACY",  
   },  
   "geometryType": "esriGeometryPoint",  
  },  
    {  
   "layerId": 5,  
   "layerName": "Pharmaceutical Entities",  
   "attributes": {  
    "OBJECTID": "255",  
    "FACILITYTYPE": "Pharmacy",  
    "FACILITYSUBTYPE": "24 Hr Pharmacy",  
    "COMMERCIALNAME_E": "AL DEWAN PHARMACY",  
    },  
   "geometryType": "esriGeometryPoint",  
   }  
 ]}  

jueves, 1 de mayo de 2014

Análisis de Floyd Mayweather y Marcos Maidana

Mayweather y Maidana pelean este sábado 3 de Mayo. Particularmente, el análisis de Floyd está muy completo.

Floyd Mayweather

Marcos Maidana
https://www.youtube.com/watch?v=Lo6ND7-PFvY

martes, 22 de abril de 2014

Multitouch - CoronaLabs

Hola gente!

Andamos preparando la siguiente app, y me encontré con un problema, ¿como poder hacer click al mismo tiempo a dos botones diferentes?

NOTA: Para poder saber si tu aplicación acepta el multitouch, es necesario probar la aplicación en el celular.

Pasemos al código:

Primero creemos nuestros 2 botones:

 local widget = require( "widget" )  
 local button1 = widget.newButton  
 {  
   left = 100,  
   top = 200,  
   id = "button1",  
   label = "Boton1",  
   onEvent = handleButtonEvent  
 }  
 local button2 = widget.newButton  
 {  
   left = 200,  
   top = 200,  
   id = "button2",  
   label = "Boton2",  
   onEvent = handleButtonEvent  
 }  

Con estas lineas creamos el código necesario para visualizar dos botones, a los cuales al darle click mandamos llamar a la función handleButtonEvent, la cual es la siguiente:

 local function handleButtonEvent( event )  
   if ( "ended" == event.phase ) then  
    print( event.target.id .. "was pressed")    
   end  
 end  

Esta función es mandada llamar en diferentes eventos del botón, pero nosotros preguntamos si la fase a la que mandaron llamar es la de acabada y con esto nos damos cuenta que el usuario dio click y ya retiro el dedo del botón, dando como resultado el mostrar en consola el nombre del botón que fue presionado.

Pero ¿como mostrar al usuario que presiono el botón?,  vamos a crear dos variables,llamadas cont1 y cont2, las cuales contendrán el número de veces que la persona a presionado el botón, y crearemos dos variables más para mostrar el numero de veces que han presionado el boton1 o el boton2.

 local cont1 = 0  
 local cont2 = 0  
 local myTextCont1 = display.newText( "hello", 100, 200, native.systemFontBold, 12 )  
 myTextCont1:setFillColor( 1, 0, 0.5 )  
 local myTextCont2 = display.newText( "hello", 200, 200, native.systemFontBold, 12 )  
 myTextCont2:setFillColor( 1, 0, 0.5 )  

Como podemos ver, las variables por el momento solo muestran un texto de hello, pero éste puede ser modificado de manera dinámica por medio de nuestra función handleButtonEvent. Esta función quedaría de la siguiente manera:

 local function handleButtonEvent( event )  
   if ( "ended" == event.phase ) then  
     if(event.target.id == "button1") then  
          cont1=cont1+1  
          myTextCont1.text = cont1  
          else  
          cont2= cont2+1  
          myTextCont2.text = cont2  
     end  
 print( "Button1 was=" .. cont1 .."button2 was =".. cont2 .. "event target id =".. event.target.id )  
   end  
 end  

Como pueden ver, podemos cambiar el texto de la variable accesando con el nombreDeVariable.text.

Si nosotros probamos la aplicación en el celular, podremos ver que no funcionan los botones al mismo tiempo, y esto es por que por default, se tiene desactivada esta funcionalidad. Para activarla agregamos la siguiente linea de código en la parte superior de nuestro main y ¡wala!.

 system.activate("multitouch")  

Para aquellos que no quiere explicación y quieren código para probar, les mando en el siguiente link los archivos de código fuente que se utilizaron.
Código fuente.
APP DEMO.

Recomendaciones y sugerencias, deja tu comentario, saludos y GG!


lunes, 21 de abril de 2014

¿Quién soy? - Eperez

Mi nombre es Edgar, experto en análisis.

El análisis es el arte de encontrar los componentes más simples de un sistema complejo. Es el arte de encontrar problemas, solucionarlos, e implementar los ajustes necesarios.

No existen herramientas analíticas que nos ayuden a detectar problemas en sistemas complejos. Por eso el análisis es un arte que sólo se puede desarrollar con experiencia, prestando atención, siempre en busca de los elementos más simples del "todo", y con un poco de suerte también.

Cada persona tiene facilidad de analizar diferentes situaciones según sus experiencias y área de especialización. Pero sólo cuando conscientemente decidimos analizar algo es que nuestra habilidad analítica puede mejorar en gran medida.

Por ejemplo, ¿por qué las muchachas bonitas son bonitas? Hacer la pregunta es sólo el primer paso, y la mayoría de la gente ni siquiera da ese paso. Damos por sentado que las delgaditas son guapas, o que las que tienen ciertas proporciones son más bonitas, etc. Pero un buen analista va más allá. Un buen analista primero identifica el sistema a analizar. Y después no descansa hasta encontrar cada sub-elemento del problema.

Pero eso no es fácil. Se requiere de gran determinación...


¿Quienes soy? - Ameza

Que onda raza!

Mi nombre es Aarón, y será un gusto poder compartir mis experiencias con ustedes en este blog. 
Soy Ingeniero en Sistemas Computacionales y para mi familia, la persona que les quita los virus a sus computadoras, no se crean familia.

Mi vida laboral de ISC, consta de como 5 o 6 años (no recuerdo mi CV). Y estoy orgulloso de haberme titulado con un proyecto que hice con un amigo, que digo amigo, ¡UN HERMANO!, su nombre es Eder Salim. Estuvimos trabajando en un simulador del Santuario descrito en la Biblia (en el libro de Exodo) controlado por el Kinect. También estuve trabajando con Jwm Solutions, Clever Software y se empezó, con la ayuda y el apoyo del departamento de Investigación de la Universidad, un Laboratorio de Realidad Aumentada. 

Estado civil ¡CASADO!, obviamente soy recién casado, por que sigo feliz con mi hermosa y amorosa esposa, y me gusta jugar dota 2, futbol, basket, voli, fut beis, roña, trompo, canicas, hoyito, etc etc.

Saludos y GG!






¿Como ganar dinero desarrollando Apps?

Hola gente!

La respuesta a esta pregunta estará al final de el articulo, ¡PERO PRIMERO LEE! no hagas trampa.

Las apps son para muchos desarrolladores un sueño, el tesoro al final del arco iris, la ciudad de el dorado, o una mekans en peleas de equipo*. Pero en realidad ¿es posible sobrevivir desarrollando aplicaciones?.
Como muchos, deseo poder generar ingresos como para poder sobrevivir, y poder generar aplicaciones como angry birds, whatsapp, facebook, aunque en realidad es como querer ganar la lotería.

Existen diferentes tipos de ventas en el mercado de las aplicaciones, unos venden dentro de sus aplicaciones, otros venden las aplicaciones y otros muestran anuncios y con esto generan ingresos, pero no conozco a nadie que lo halla hecho, así que me dedique a buscar a alguien que lo hiciera.

Investigando me encontré con un canal de IRC donde me encontré con una persona que ha trabajado con juegos desde hace 20 años, el cual me comentó que los anuncios en las aplicaciones solo molestan al usuario, que son distracciones y me recomendó que vendiera mis aplicaciones, ya que uno puede generar una experiencia de juego, que el usuario recomendará, y si es buena la aplicación se venderá.

Para aquellos que tengan experiencias que podría ayudar a gente nueva como yo, les agradezco dejen un comentario o me contacten para contar alguna de sus experiencias.

Saludos y GG!

Respuesta: Tramposo, no leíste nada! :P