Archives For flash

Asteroides, multiplayer

julio 13, 2006
asteroides

Multiplayer asteroids es una version del clasico ‘asteroides’, pero esta vez, es multijugador, y por supuesto, creado en Flash.

Pones tu nick, y entras a matar, el juego lleva la cuenta de cuantas veces te han destruido, y a cuantas has destruido. Asi, si te defiendes y destruyes a los suficientes, pasas al primer puesto de la lista, y tendras el orgullo de haber estado gastando el tiempo en este adictivo juego 🙂

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

swfEmbed

julio 7, 2006

SwfEmbed es un plugin para wordpress para incluir swf’s en un post de manera simple. Solo lo bajas, lo instalas en tu sitio, y cuando desees incluir un archivo swf solo escribes:

[ swf ]path/del/archivo.swf,ancho,alto,colordefondo[/ swf ]

Este plugin utiliza swfObject, un script bastante popular para incluir swf’s en tu pagina utilizando Javascript, para evitar el maldito mensaje ‘De click para activar este control’ que aparece en internet explorer cuando utilizas los tags tradicionales <embed> y <object>.

Link: swfEmbed
Link: swfObject

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…

dofus

Dofus es un MMORPG (Massive Multiplayer Online Role Playing Game), es decir un juego multiusuarios online. Dos cosas interesantes: es gratuito, y fue creado utilizando Adobe Flash para el frontend. La verdad, no lo he jugado mucho, pues prefiero evitarlo, puesto que este tipo de juegos suele ser altamente adictivo. Tu creas tu propio personaje, y entras a un mundo virtual, donde puedes interactuar con otros jugadores e ir completando las tareas del juego para ir subiendo de nivel. Lo puedes bajar en esta pagina.

Y entre otras novedades, uno de los ilustradores del juego tiene un blog donde a colocado varios dibujos de los personajes de dofus. Me gusta, me gusta, el estilo es bastante inspirado por el anime japones. Vale la pena visitar la galeria.

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

Finalmente, un poco de actionscript para compartir. 🙂

En Flash, el metodo round de la clase Math nos permite redondear decimales. Pero siempre redondea al numero entero mas proximo. Y si necesitamos redondear a dos, o tres, o cuatro decimales, como hacemos? El siguiente codigo lo muestra:

  1. function round(qnum:Number, qdecimal:Number):Number {
  2.     var decimal:Number = Math.pow(10, Math.round(qdecimal));
  3.     var num:Number = Math.round(qnum*decimal)/decimal;
  4.     return num;
  5. }
  6. var num:Number = round(65.656321, 2);
  7. trace(num); //devuelve 65.66

Esta es una pequeña introduccion al siguiente post, donde añadire un par de detalles.