Anuncios Google

btnevents: Gestionar pulsaciones de los botones con eventos

Este es mi primer proyecto para la PSP, es una librería que permite crear eventos para manejar los botones, por ejemplo, crear un evento para el botón círculo para que cuando se pulse vaya a una función determinada. Ahora mismo, aunque funciona, no hay versión definida, es lo que se llama una prueba de concepto.

La idea es muy simple y se puede ver en el siguiente código de ejemplo que no es más que una simple forma de mostrar unos textos:

 /*
Gestión de eventos (prueba de concepto)
(c)GorristeR 2009. Under GPL3 License.
*/
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>
#include "btnevents.h"
#define printf pspDebugScreenPrintf
PSP_MODULE_INFO("prueba_eventos", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
 
//Funciones de ejemplo que usaremos para gestionar los botones, lo único que
//hay que tener en cuenta, es que como parámetro se envía el botón pulsado
void procesa_direcciones(unsigned int boton);
void procesa_circulo(unsigned int boton);
void procesa_equis(unsigned int boton);
 
int main()
{
    //Se asignan las diferentes funciones según el botón pulsado
    btnEventAdd(PSP_CTRL_CIRCLE, procesa_circulo);
    btnEventAdd(PSP_CTRL_CROSS, procesa_equis);
    btnEventAdd(PSP_CTRL_UP, procesa_direcciones);
    btnEventAdd(PSP_CTRL_DOWN, procesa_direcciones);
    btnEventAdd(PSP_CTRL_LEFT, procesa_direcciones);
    btnEventAdd(PSP_CTRL_RIGHT, procesa_direcciones);
 
    btnEventStart(); //Esta instrucción activa la gestión de los botones
 
    pspDebugScreenInit();
    pspDebugScreenSetTextColor(0xFFFFFF);
    printf("Pulsa los botones de direccion o el circulo (X=salir)\n");
    while(1){
        /*
        Aquí se puede poner el código que se quiera, la gestión de los botones
        no precisa de nada por parte del programador. En cualquier momento podemos
        parar los eventos de los botones con btnEventStop() (no implementado aún).
        */
    }
}
 
void procesa_equis(unsigned int boton)
{
    sceKernelExitGame(); //FIXME
}
 
void procesa_circulo(unsigned int boton)
{
    printf("Circulo\n");
}
 
void procesa_direcciones(unsigned int boton)
{
    //En este caso el parámetro boton sí que se usa, porque este evento es llamado
    //al pulsar 4 botones diferentes.
    char *mensaje;
 
    switch(boton) {
        case PSP_CTRL_UP: mensaje = "Arriba\n"; break;
        case PSP_CTRL_DOWN: mensaje = "Abajo\n"; break;
        case PSP_CTRL_LEFT: mensaje = "Izquierda\n"; break;
        case PSP_CTRL_RIGHT: mensaje = "Derecha\n"; break;
    }
    printf(mensaje);
}

 El resultado sería algo así: (lo siento pero no tengo captura de pantalla, si alguien se anima...)

-----------------------------------------------------------------------

Pulsa los botones de direccion o el circulo (X=salir)

Arriba

Abajo

Abajo

Circulo

Derecha

----------------------------------------------------------------------

Como veis, para crear un evento tan sólo hay que usar la función btnEventAdd(codigo_de_boton, funcion_a_usar). Una vez que tengamos definidos los eventos, se usa la función btnEventStart() para que se comienzen a leer las pulsaciones de teclas. Y eso es todo, pienso que ahorrará bastante código a los que desarrolléis aplicaciones.

Podéis descargar el ejemplo y el código fuente bajo licencia GPL3, aquí


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de MoLoToVE_v10 M33

No entiendo

No entiendo pero me imaginoq eu es algo grande xD

Imagen de pspgorrister

Bueno

No sé si sabes programar pero digamos que es para asignarle a un botón, una función que hace un código.

Lo bueno es que no tienes que comprobar el botón todo el rato estilo "if boton_pulsado=mi_boton then ...", tan solo lo asignas y cada vez que se pulse el botón se ejecutará ese codigo sin intervención del programador.

A la hora de desarrollar aplicaciones te ayuda bastante, porque te ahorras esa parte del código que está todo el rato leyendo las teclas pulsadas en un bucle, y después de leerlas comprobarlas y llamar a la función para que haga algo.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de _Dark_Cloud_

Buenas

¿Sabes si es compatible con la libreria VLF?

Es que para añadir eventos en ella es un poco dificil (bueno, dificil es quitarlos sin que crashee la psp).

Salu2



¡Visca el Barça y Viva España!

Imagen de pspgorrister

Curiosamente, ahora mismo

Curiosamente, ahora mismo estoy haciendo un "wrap" en C++ del VLF Menú que tú mismo posteaste hace un tiempo. Tengo implementadas las clases, métodos y datos, aunque sin ninguna funcionalidad.

No he visto el código fuente de las VLF, pero supongo que no debería dar problemas ya que lo que hace btnEvents es crear una hebra de ejecución con la función estándar sceKernelCreateThread y comprobar si se ha pulsado una tecla que está asignada.

El problema que puede haber es que si por ejemplo con si estás en un menú VLF y con btnEvents has definido la tecla ARRIBA para una función, si pulsas esa tecla se ejecutarán ambas funciones (la de VLF menu que cambia de opción, y la definida en btnEvents).


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de _Dark_Cloud_

Buenas

Gracias por responder.

La verdad es que me parece muy interesante esta libreria y sin duda la usare en mis futuros proyectos.

Un saludo ;)



¡Visca el Barça y Viva España!

Imagen de Esterford®

Wow, es algo espectacular...

Wow, es algo espectacular...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.