VGField

La clase VGField le permite utilizar la biblioteca de OpenVG simplemente con incluir el código que gestiona la configuración de EGL. VGField también incluye compatibilidad integrada para actualizar la pantalla tras un número determinado de fotogramas por segundo. Es una buena elección para aplicaciones de juegos en 2D y de animación.

VGField es una clase abstracta. Debe ampliarla para crear un componente de IU que pueda añadir a una pantalla. Su subclase debe incluir un constructor y omitir layout(), initialize() y render().

El constructor puede llamar al constructor de clase principal invocando super() e introduciendo la versión VGField.VERSION_1_1 de OpenVG que desea utilizar. En initialize(), puede escribir el código que realiza las tareas de configuración, como para configurar el color que desea utilizar para borrar la pantalla. En layout(), puede configurar el tamaño del campo.

Puede utilizar setTargetFrameRate() para crear un subproceso de representación que llama a render() al alcanzar el número de fotogramas por segundo especificado. No tiene que omitir update(), pero si lo hace, también llama a los fotogramas por segundo de destino. La representación iniciada por setTargetFrameRate() ejecuta el subproceso de evento que se crea cuando llama a enterEventDispatcher(). Debe establecer un número fotogramas por segundo de destino mediante setTargetFrameRate() en vez de deshabilitar la representación manualmente usted mismo. Treinta fotogramas por segundo es generalmente el límite mínimo para obtener gráficos en tiempo real fluidos. Sesenta fotogramas por segundo es el límite máximo debido a la velocidad de actualización de LCD. Un mayor número de fotogramas por segundo consume más batería. Los fotogramas por segundo se pueden configurar de forma dinámica.

Si no especifica un número de fotogramas por segundo de destino, utiliza de manera predeterminada 0 y se llama a paint(), render() y update() desde el subproceso de evento estándar de IU en respuesta a invalidate(). Tenga en cuenta que se llama a initialize() cuando se pierde el contexto de EGL y se elimina el campo y se vuelve a añadir a la pantalla.

Ejemplo de código: implementación mínima de VGField

El siguiente ejemplo de código ofrece implementaciones sencillas para los métodos necesarios. Puede crear una clase MyVGField y añadirla a una pantalla.

import net.rim.device.api.openvg.VGField;
public class MyVGField extends VGField
{
     private static final float[] MY_CLEAR_COLOR = new float[] { 0.6f, 0.8f, 1.0f, 1.0f };
     public MyVGField(int version)
     {
         super(version);
     }
     protected void layout(int width, int height)
     {
         setExtent(100, 100);
     }
     protected void initialize(VG vg)
     {
         VG11 vg11 = (VG11)vg;
         vg11.vgSetfv(VG10.VG_CLEAR_COLOR, 4, MY_CLEAR_COLOR, 0);
     }
     protected void render(VG vg)
     {
         VG11 vg11 = (VG11)vg;
         vg11.vgClear(0, 0, this.getWidth(), this.getHeight());
     }
}
Tema anterior: OpenVG

¿Le ha resultado útil esta información? Envíenos sus comentarios.