martes, 29 de septiembre de 2009

Cambiar tamaño objeto html flash


A veces necesitamos que el objeto flash que se encuentra dentro de un HTML cambie de tamaño dinámicamente, en tiempo de ejecución.
Por medio de Externalinterface de Actionscript y Javascript es sencillo hacerlo. Se declara el objeto flash al 100% dentro de un elemento DIV, luego por javascript se cambia el tamaño. permitiendo de esta manera la habilitación del scroll nativo del navegador web.



sábado, 29 de agosto de 2009

Image.java v1.0 - Clase para el reescalar imágenes

Esta pequeña clase surge con la necesidad de reescalar imágenes de cualquier tipo (JPG, PNG, BMP, GIF), normalmente se utiliza esta función al subir imágenes al servidor a través de un servlet, desde un HTML form o con FileReference desde Actionscript.

Las principales características son:
-Soporta todos los formatos de imagen estándares.
- Mantiene las proporciones, si así se le indica.
- Mantiene las transparencias originales, válido para png’s por ejemplo.
- Suaviza las imágenes al reescalar.
- Permite aumentar el tamaño (opcional) para casos en que el tamaño deseado sea mayor al de la imagen.

Es la versión 1.0, si encuentran algún problema por favor contáctenme, a continuación los ejemplos de uso:

Imagen Original, 640x512 pixeles:

Llevado al tamaño preferido: 250,250, sin mantener proporciones:

Llevado al tamaño preferido: 250,250, manteniendo proporciones:

Manteniendo proporciones, el resultado final de la imagen tiene 250x200 pixeles.

Aquí los Archivos Fuente


jueves, 27 de agosto de 2009

Leer la intensidad de sonido desde micrófono en actionscript

Ejemplo que he realizado en 2008 para un juego, captura la intensidad de sonido que ingresa por el micrófono ( o LineIn ).
Para poder grabar/reproducir se necesita conexión RTMP contra un FlashMediaServer/Red5/Woonza, u otro, no obstante se pueden realizar interesantes juegos por medio de esta utilidad.



Archivo Fuente

viernes, 21 de agosto de 2009

Reflection, carga dinámica de clases

En algunas ocaciones es necesario expadir la funcionalidad de aplicaciones java en tiempo de ejecución, dinámicamente, cuando la aplicación está ejecutandose y no se quiere/puede reiniciar el servicio.
Para ello nos podemos valer de dos utilidades: Las Interfaces y el Objeto Class:

Interfaces:
Una interfaz en Java es una clase en la que todos sus métodos son abstractos. En ellas se especifica qué se debe hacer pero no su implementación.

Class:
Tiene un método llamado "forName(String)" que permite buscar una clase dinámicamente.

En el ejemplo que he creado, se puede pasar por como argumento de aplicación una cadena de texto que servirá para localizar la clase:

INTERFAZ - IJuego.java

package juegos;

public interface IJuego {

boolean doInit();
boolean doClientAction(int usuario_id, Object response);
boolean doEnd();
}


IMPLEMENTACION - JuegoA.java

package juegos.implementation;

import juegos.IJuego;

public class JuegoA implements IJuego {

@Override
public boolean doInit(){
System.out.println("doInit juego 11: " + this.getClass().getName() );
return true;
}
@Override
public boolean doClientAction(int usuario_id, Object response){
return true;
}
@Override
public boolean doEnd(){
return true;
}
}


UTILIZACION DINAMICA - Principal.java

import juegos.IJuego;


public class Principal {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String classname = null;
if (args.length > 0) {
classname = (String) args[0];
}
if(classname!=null){
System.out.println("Nombre de clase definido como argumento");
new Principal().initGame( classname );
}else{
new Principal().initGame("juegos.implementation.JuegoC");
}
}
private void initGame( String nombreclase ){
IJuego juego;
Class instancia;
try{
instancia = Class.forName( nombreclase );
juego = (IJuego) instancia.newInstance();
juego.doInit();
}catch( Exception e ){
System.out.println( "Exepción: " + e.getMessage() );
e.printStackTrace();
}

}
}



Fuentes (proyecto java en eclipse)

miércoles, 12 de agosto de 2009

FilesToXML v1

Utilidad escrita en java que lee todos los archivos de un directorio y lo pasa a simples nodos XML.

Tuve la necesidad de crear la herramienta para evitar la tediosa tarea de pasar uno a uno los nombres de archivos a XML.

Se puede parametrizar:
- Nombre del prefijo para los nodos
- Tipos de archivo admitidos, separados por coma, o * (todos)

Captura

martes, 11 de agosto de 2009

Botón flash dinánico, definido desde Html

A veces es necesario pasar parámetros a un objeto flash desde una página HTML con el objetivo de reutilizar un mismo objeto flash.

Ejemplo:



En la declaración del Objeto Flash en HTML, reemplazar:

as2_bottom_embed.swf?label=Google&url=http://www.google.com&window=_self

Utilizando los criterios:
as2_bottom_embed.swf?label=ETIQUETA&url=DIRECCION&window=WINDOW

ETIQUETA: Texto del botón.
DIRECCION: Dirección web de destino
WINDOW: _blank | _self | _parent |_top


ATENCIÓN: Por cuestiones de seguridad las pruebas fuera de un servidor Web podrán no funcionar.


Archivos del ejemplo

lunes, 10 de agosto de 2009

FLADE pequeño motor de física para Actionscript2

No es común encontrar motores de física para Actionscript 2, sin embargo hay proyectos As2 que lo requieren, a inicios del año pasado (2008) tuve que utilizarlo para un juego, lo recomiendo es muy sencillo de utilizar y ampliar:

Motor de física FLADE (As2)

Un ejemplo rápido que hice recién:



Si tienen un proyecto en As3 o están por comenzar uno, recomiendo el motor isométrico del mismo autor:

Motor de física APE (As3)

Saludos.

martes, 4 de agosto de 2009

Determinar si un número es par o impar en ActionScript 2 o ActionScript 3

En ActionScript 2 y ActionScript 3:

var numero:Number = 2;
var par:Boolean = numero/2 === Math.round(numero/2);
trace("Es par? " + par);

miércoles, 29 de julio de 2009

Sistema Isométrico




Un motor isométrico permite la creación de espacios virtuales de gran calidad manteniendo un bajo consumo de recursos en el ordenador, generando de esta manera una experiencia visual muy real e interactiva.

Hace unas semanas tuve que desarrollar un sistema isométrico para flash, los mejores tutoriales y ejemplos los encontré en:

Como en todo desarrollo, los manuales y ejemplos quedan escasos teniendo uno que agregar nuevos  módulos y extender funcionalidades básicas existentes, como resultado de todo esto pude crear mi primer motor isométrico, a continuación las características más sobresalientes:

• Procesa grandes mapas con un sistema de muestreo inteligente, visualizando la porción del mapa que el usuario desea ver. Al producirse desplazamientos, el sistema añade y elimina porciones del mapa según sea necesario.
• Dispone de un sistema para buscar caminos, el sistema busca el camino más eficiente para llegar al destino desde una posición original implementando el algoritmo A*.
• Diseño en tiempo real, la creación de mapas, mundos, barrios, ambientes, es sencillo gracias a la herramienta de creación de mapas que otorga un control total al autor, permitiendo cambiar el suelo, objetos, zonas activas y personajes.

Y ahora también, sistema de chat.