Archives For codigo

Design Patterns

Cuando era pequeño aprendí a hablar. Lo mejor de todo es que la gente me entendía. Y mientras más practicaba, y más viejo me ponía, pronunciaba las palabras más claramente, y me era más sencillo expresar mis ideas. En ese entonces no tenía idea de lo que era una oración, un verbo, un sustantivo. No conocía esos conceptos, sin embargo, los usaba diariamente. Fue después, en escuela primaria, que aprendí de gramática. Y para mí, aparte de que era una materia aburrida, no se trataba de aprender nada nuevo, sino de una materia que aclaraba lo que yo ya sabía y venía usando desde hace años. Aprender de gramática me aclaró el panorama, me ayudó a utilizar mi idioma de mejor manera.

Si tu, profesionalmente, o como hobby, te dedicas a programar, de seguro has escuchado hablar a diestra y siniestra de los famosos patrones de diseño. Que el singleton, que el factory, que el mvc, etc. Si no has oido de ellos, entonces, realmente, vives en otro planeta. Yo no vivía en otro planeta, pero por mucho tiempo me hice de la vista gorda y siempre daba la espalda cada vez que habia oportunidad de aprender sobre ese tema. Simplemente creía que ese tema y que mi vida simplemente era más fácil sin usar los famosos patrones de diseño.

De repente, Adobe (o fue Macromedia) inventó Flex, una solución de desarrollo de RIA’s (en pocas, aplicaciones para internet) que hace uso extensivo, según lo que he leído, del patrón MVC. Como me interesa aprender Flex, decidí que era hora de saber un poco más acerca de los complicados y famosos patrones de diseño, sobre todo el famosísimo MVC. Cogí un libro sobre el tema, y mientras más leía, me daba cuenta que estaba aprendiendo sobre algo que ya sabía. Igual que años antes, con la gramática, ahora mi libro de patrones de diseño no me enseñaba nada nuevo, sino que aclaraba el uso de algo que yo ya venía usando, bien o mal, desde hace tiempos. Ese librito vino a poner un nombre a lo que yo ya usaba, pero que no había bautizado, y aparte, vino a ayudarme a ver problemas en mis programas que por falta de experiencia yo no había visto.

Continue Reading…

En dos post anteriores (I y II) hablabamos de la clase BitmapData y su metodo copyChannel para copiar un canal de color de un bitmap a otro.

Ahora bien, aqui tienen un pequeño efecto que se puede crear utilizando lo que ya aprendimos.

Mueve el mouse sobre la imagen

La idea es tener 3 movieclips vacios en el Stage, todos con blending mode ‘Multiply’. Luego, añado un bitmap a cada movieclip, copiando un canal de color del bitmap original. No pongo el codigo, porque es basicamente el mismo que el explicado en la parte I de este tema.

El efecto tambien se puede realizar sobre un fondo negro, con la diferencia de que los bitmaps que voy a modificar, son negros, y el blending mode de los movieclips es ‘Add’

Mueve el mouse sobre la imagen

Pueden bajar el archivo fla para ver que es lo que se hizo exactamente:
Bajar el archivo fla (flash 8 ): colortest3.zip

Este es otro ejemplo de copiar la informacion de un canal de un bitmap hacia otro. En un post anterior habia explicado como realizarlo.

Bajar el archivo fla (flash 8 ): colortest2.zip

Mas codigo, esta vez, vamos a jugar un poco con el objeto BitmapData de Flash 8.

En este ejemplo esta la imagen original, y tres imagenes, con los colores cambiados. Como? pues copie la informacion del canal verde del bitmap original de tres distintas formas. Veamos que se hizo.
Continue Reading…

En el post anterior mostraba una funcion para redondear un numero a un numero especifico de decimales.

Puse esa funcion en una clase (LaoMath), y le agruege una caracteristica mas: si quisiera redondear 65.6565 a dos decimales, uso el metodo round de mi clase LaoMath:

  1. import com.innocuo.utils.LaoMath;
  2. var num:Number = 65.6565;
  3. trace(LaoMath.round(num,2)); //devuelve 65.66

Facil, verdad? ahora, si quiero mostrar el resultado con 4 decimales (en el ejemplo, el resultado deberia tener dos ceros mas al final), el codigo es:

  1. import com.innocuo.utils.LaoMath;
  2. var num:Number = 65.6565;
  3. trace(LaoMath.round(num,2,4)); //devuelve 65.6600

En el ejemplo LaoMath.round es el metodo que utilizo para redondear el numero, num es el numero que quiero redondear, 2 es la posicion decimal a la que quiero redondear, y 4 es el numero minimo de decimales que debo tener. Atencion, que es el numero minimo, asi que en este otro ejemplo, no funcionaria igual:

  1. import com.innocuo.utils.LaoMath;
  2. var num:Number = 65.6565;
  3. trace(LaoMath.round(num,2,1)); //devuelve 65.66

En este caso pido que el numero devuelto tenga como minimo 1 decimal, pero estoy redondeando a dos decimales, asi que ese parametro se ignora.

Ahora, una caracteristica especial de este metodo es que permite no solo redondear a un numero decimal, sino tambien a decenas, centenas, miles, etc. Como? simplemente asignando un numero negativo al segundo parametro (la funcion entendera que estoy redondeando hacia la izquierda). Por ejemplo:

  1. import com.innocuo.utils.LaoMath;
  2. var num:Number = 65.6565;
  3. //redondear por decenas
  4. trace(LaoMath.round(num,-1)); //devuelve 70
  5. //redondear por centenas
  6. trace(LaoMath.round(num,-2)); //devuelve 100
  7. //redondear por centenas, y mostrar el resultado con 3 decimales
  8. trace(LaoMath.round(num,-2,3)); //devuelve 100.000
  9. //OJO, si redondeo 65.6565 a miles, el resultado sera 0
  10. trace(LaoMath.round(num,-3)); //devuelve 0

Espero que estos ejemplos sean de utilidad. La clase es gratuita (si algun dia tengo tiempo, añadire otros metodos de interes).
bajar codigo: laomath.zip
documentacion: link
codigo fuente: link