May 29
Articulos programación Como dice su lema 'serious monkyes. serious engine.' nos encontramos ante una API de alto rendimiento para la generación de escenas gráficas en 3D realmente maduro. Sólo hay que echarle un vistazo a su sección de películas y demos que da cuenta de las posibilidades actuales de su motor gráfico. jMonkeyEngine es un proyecto de código abierto bajo licencia BSD que comenzo allá por el año 2003. Actualmente acaban de sacar la alpha de la versión 3 del engine.

Para poder empezar a desarrollar basta con descargase las librerías jar del proyecto. Actualmente lo mejor es hacerlo a través de las versiones nocturnas aunque puedas encontrarte con alguna versión más o menos estable el producto está bastante acabado.

Ahora sólo tienes que descomprimirlo (descarga .zip) he importar jMonkeyEngine3.jar y la carpeta lib que se encuentra en el zip dentro de tu proyecto. También tienes los javadoc y el código fuente en el archivo zip y en la página web de jMonkeyEngine puedes ver tutoriales explicativos para poder comenzar a hacer tus pinillos en el mundo 3D.

Happy coding!

Publicado por Abraham Covelo

Abr 10
Articulos programación Aunque el formato de datos XML alardea de características como: extensibilidad, legibilidad, jerarquización, estandarización y capacidad de adaptación a multitud de formatos. A la hora de analizarlo y extraer información de él es, computacionalmente, un formato que presenta algunas dificultades con respecto a otros. Si bien es verdad que existen librerías/APIs dedicadas a superar este pequeño handicap. A continuación veremos ejemplos de dos tipos de librerías para analizar un documente XML desde java. Uno de ellos es el DOM (Document Object Model) y otro es el SAX (Simple API from XML).

Las diferencias principales entre DOM y SAX es que DOM genera un arból de objetos con sus dependencias en memoria. Esto permite acceder a cualquier elemento en cualquier posición una y otra vez, atrás y adelante sin problemas. El problema es que consume mucha memoria y no sería una opción recomendable para XMLs muy grandes. SAX por otro lado no almacena información en memoria y lee el fichero secuencialmente hasta encontrar el elemento y la información que necesitas en un proceso en donde se registran métodos callback cada vez que se detecta determinados patrones en el documento (apertura de etiquetas XML por ejemplo). SAX podría manejar con mayor facilidad grandes ficheros XML pero sin la libertad del DOM.

Veamos como podemos analizar este fragmento de XML


<?xml version="1.0" encoding="UTF-8"?>
<personas>
 <persona sexo="masculino">
  <nombre>Pepe</nombre>
  <apellidos>Gracia Perez</apellidos>
 </persona>
 <persona sexo="femenino">
  <nombre>María</nombre>
  <apellidos>Suarez Martinez</apellidos>
 </persona>
</personas>



Continua leyendo "Analizar XML con Java"

Publicado por Abraham Covelo

Abr 5
Articulos programación A continuación unas pequeñas recetas de java para pasar de cadena a entero o de entero a cadena.

Para convertir un String (cadena) a int (entero) hay que emplear el método estático de la clase Integer, parseInt

Ejemplo:


String enteroString = "5";
int entero = Integer.parseInt(enteroString);


Para convertir int(entero) a String sólo debemos hacer una llamada al método estático de la clase Integer, toString

Ejemplo:


int entero = 1;
String enteroString = Integer.toString(entero);



Análogamente para pasar de cadena a double tenemos el método Double.parseDouble

Ejemplo:


double aDouble = Double.parseDouble(aString);


o al revés (double a string) llamamos al método Double.toString

Ejemplo:


double d = 8342342;
System.out.println(Double.toString(d));


Tanto la clase Integer con la clase Double se encuentran en el package java.lang. Atención int y double son tipos primitivos del lenguaje java. Integer y Double son clases que representan estos tipos primitivos y le añaden más funcionalidades. Como por ejemplo las que acabamos de ver.

Publicado por Abraham Covelo

May 31
Articulos programación Hoy le daré algo de publicidad al elemento canvas de la especificación HTML versión 5. Esta especificación aún está en estado de borrador pero ha incluido este elemento que ya estaba presente en navegadores como Safari y navegadores basados en Gecko 1.8 como Firefox 1.5 y posteriores. También Opera desde la versión 9 y Chrome soportan canvas. Internet Explorer no lo soporta, aunque algunas personas han querido arreglar esto. A lo largo de este artículo incluyo varios canvas y podréis comprobar si vuestro navegador los soporta simplemente viendo si aparece la imagen del canvas en vuestro navegador.

Canvas es un elemento que permite representar gráficos empleando javascript. Veamos paso por paso como podemos utilizar canvas. Primero creamos el elemento canvas en nuestro html. Este es un ejemplo


<canvas id="micanvas" width="200" height="150">Lo siento, tu navegador no soporta <strong>canvas</strong></canvas>


Sencillo ¿no?. Aquí hemos creado un canvas de 200 pixeles de ancho por 150 de alto y le hemos asignado un identificador para poder referirnos a él posteriormente. Siguiendo la especificación de w3c el valor por defecto del ancho del canvas es 300 pixeles y el del alto es 150 pixeles. Estos valores pueden ser modificados a posteriori empleando hojas de estilo CSS. Si tu navegador no soporta canvas se mostrará el contenido entre las etiquetas canvas permitiendo así mostrar contenido alternativo. Este es el efecto de este código canvas en tu navegador:



Lo siento, tu navegador no soporta canvas

Veamos ahora como a través de javascript podemos pintar algo sobre canvas. Este es el código inicial al que hemos añadido un cuadrado rojo:

var micanvas = document.getElementById('micanvas');
if (micanvas.getContext)
{
var context = micanvas.getContext('2d');
context.fillStyle = "rgb(255,0,0)";
context.fillRect(20,20,100,120);
}
else
{
//canvas no soportado
}

Veamos el resultado

Lo siento, tu navegador no soporta canvas



Atención, si se modifica el ancho o el alto del objeto canvas la imagen se borra volviendo al estado inicial. Esto se puede lograr como habíamos comentado antes a través de hojas de estilo o en javascript mediante:

micanvas.setAttribute('width',250)

ó

micanvas.width = 250;

También

micanvas.width = micanvas.with

ó

micanvas.height = micanvas.height

Borra el canvas actual pero mantiene su tamaño.

El único contexto válido actualmente es el 2d que tiene una API 2D especifica. Es posible que en el futuro surjan otros contextos, por ejemplo 3d que empleen la API de OPENGL para representar contenido tridimensional con aceleración por hardware (estaremos atentos a esto)

Algunos de los métodos empleados por la API 2d y que podéis utilizar son:

save()
restore()
scale(x, y)
rotate(angle)
translate(x, y)
transform(m11, m12, m21, m22, dx, dy)
setTransform(m11, m12, m21, m22, dx, dy)
globalAlpha [ = value ]
globalCompositeOperation [ = value ]
strokeStyle [ = value ]
fillStyle [ = value ]
clearRect(x, y, w, h)
fillRect(x, y, w, h)
strokeRect(x, y, w, h)
arc(x, y, radius, startAngle, endAngle, anticlockwise)


La lista de métodos es muy extensa aunque no todos están soportados por todos los navegadores.

Por cierto el origen de coordenadas para este contexto esta el borde superior izquierdo.

Bueno para que no os quedéis con las ganas de ver lo que se puede hacer con este elemento os paso unos ejemplos:

canvex, racing, benjoffe


Publicado por Abraham Covelo

(Página 2 de 13, en total 49 entradas)