Herramientas de usuario

Herramientas del sitio


imagenes

Soporte de imágenes en AGE

Los mundos de Aetheria Game Engine pueden enriquecerse añadiéndoles gráficos. En particular, AGE permite mostrar fácilmente imágenes en una variedad de formatos, tanto raster como vectoriales.

Los gráficos raster son aquéllos que están definidos mediante una cuadrícula de pequeños puntos (pixels), como es el caso de las fotografías digitales. Los gráficos vectoriales son aquellos que se definen mediante líneas y curvas, y se generan con programas como Inkscape o Corel Draw.

AGE soporta los siguientes formatos de imagen:

  • Gráficos raster estáticos: JPG, GIF, PNG, BMP.
  • Gráficos raster animados: GIF animado.
  • Gráficos vectoriales: SVG.

Además, cada imagen se puede mostrar en la ventana de juego de tres maneras diferentes:

  • Integrados en el texto (como si fuera una imagen en una página web).
  • Como fondo del área de texto (es decir, por detrás del texto).
  • En una zona independiente de la ventana, especialmente pensada para mostrar gráficos, llamada frame.

Los métodos que muestran imágenes se invocan sobre un objeto de la clase InputOutputClient, que representa el cliente que está utilizando un jugador para jugar su partida. Se puede obtener el cliente de un jugador dado de la siguiente manera:

InputOutputClient theClient = jugador.getClient();

Es importante tener en cuenta que no todos los clientes de AGE soportan imágenes: por ejemplo, se pueden mostrar imágenes en el cliente gráfico de ventanas; pero no pueden mostrarse cuando se juega una partida por telnet o por IRC (véase presentación del mundo para más información). Esto obliga al programador de aventuras a comprobar que el cliente tiene la posibilidad de mostrar imágenes. Para ello, tenemos que comprobar que el cliente sea de la subclase MultimediaInputOutputClient (clientes que tienen soporte multimedia) y que permita mostrar imágenes, de la siguiente manera:

if ( theClient instanceof MultimediaInputOutputClient ) && theClient.isGraphicsEnabled() )
{
  //el código para mostrar imágenes iría dentro del if.
}

Si invocáramos los métodos para mostrar imágenes sin hacer esta comprobación, nuestro juego funcionaría (y mostraría las imágenes) al jugarlo en clientes gráficos; pero no funcionaría (y daría mensajes de error) al jugarlo en clientes sin soporte de imágenes como cheapAGE o el bot IRC de AGE. Por ello, es muy recomendable hacer siempre la comprobación para que nuestro mundo no dependa de un cliente en concreto y pueda ser accesible al mayor número de gente posible.

Métodos para imágenes

Una vez obtenido el cliente usado por el jugador y comprobado que soporta multimedia (tal y como se ha descrito más arriba), podemos invocar los siguientes métodos para mostrarle imágenes al jugador:

/*clase InputOutputClient*/ insertCenteredIcon( URL imageUrl )

Mostrar una imagen centrada integrada en el texto. Es una forma rápida de mostrar una imagen ocasionalmente, si no queremos preocuparnos de hacer una configuración detallada de dónde y cómo queremos que aparezca.

/*clase InputOutputClient*/ useImage ( URL imageUrl , int mode , int/String position , int scaling )

Muestra la imagen que está en el fichero imageFile. Este método puede usarse tanto para mostrar imágenes en medio del texto, como en marcos o como fondo.

  • El parámetro mode indica cómo se mostrará la imagen. Sus valores pueden ser ImageConstants.INLINE (mostrar con el texto), ImageConstants.FRAME (mostrar en un marco), o ImageConstants.BACKGROUND (mostrar como fondo). Nótese que para mostrar imágenes en marcos con el parámetro ImageConstants.FRAME es necesario haber creado el marco primero, tal y como se describe en la sección sobre frames.
  • El parámetro position indica en qué posición se mostrará la imagen. Si el modo es ImageConstants.INLINE, el parámetro position puede valer ImageConstants.CENTER (imagen centrada) o ImageConstants.LEFT (imagen alineada a la derecha). Si el modo es ImageConstants.FRAME, el parámetro position puede valer ImageConstants.TOP (arriba), ImageConstants.BOTTOM (abajo), ImageConstants.LEFT (izquierda) o ImageConstants.RIGHT (derecha), o bien una cadena con el nombre asignado a un frame, según en qué frame se quiere mostrar la imagen (véase Frames). Si el modo es ImageConstants.BACKGROUND, el parámetro position no tiene de momento ningún efecto (en este caso se puede pasar cualquier valor, por ejemplo 0).
  • El parámetro scaling indica qué tipo de escalado se aplicará a la imagen. Este parámetro, al menos de momento, sólo tiene sentido en el modo ImageConstants.FRAME (ya que por ejemplo una imagen que se muestra en el medio del texto no necesita escalado). En el resto de los modos se puede pasar cualquier valor, por ejemplo 0. En modo ImageConstants.FRAME, tenemos los siguientes valores permitidos para el parámetro scaling: ImageConstants.NO_SCALING (la imagen no se escalará, sino que se mostrará a su tamaño natural), ImageConstants.FIT_WIDTH (la imagen se escalará para ocupar toda la anchura del frame, manteniendo la proporción de aspecto original, o sea, sin estirar ni encoger la imagen), ImageConstants.FIT_HEIGHT (la imagen se escalará para ocupar toda la altura del frame, manteniendo la proporción de aspecto original), y por último ImageConstants.FIT_BOTH (la imagen se escalará para ocupar toda la altura y anchura del frame, pudiendo para ello modificar la proporción de aspecto).

Ejemplos de código

Supoenemos que hemos obtenido el cliente del jugador tal y como se explicaba arriba, que lo tenemos almacenado en una variable llamada theClient y sabemos que soporta multimedia.

Podemos obtener la URL de una imagen que hayamos puesto en el directorio del mundo mediante el método getResource() del mundo, de la siguiente manera:

imagen = world.getResource("ficheroimagen.png");

Hecho esto, podemos usar este código para mostrar la imagen como fondo:

theClient.useImage( imagen , ImageConstants.BACKGROUND , 0 , 0 );

Para mostrar la imagen centrada e integrada en el texto:

theClient.useImage( imagen , ImageConstants.INLINE , ImageConstants.CENTER , 0 );

Otra forma de mostrar la imagen centrada e integrada en el texto:

theClient.insertCenteredIcon( imagen );

En la sección específica sobre frames se muestra un ejemplo que muestra una imagen en un frame.

imagenes.txt · Última modificación: 2013/07/21 12:13 por al-khwarizmi