Aquí está la siguiente lección, en la lección anterior ya aprendimos a imprimir texto en pantalla ahora les enseñare a leer los botones presionados, también servirá como ejemplo elaborar un “Testeador de botones o button tester”. Ahora en el código que expondré más abajo se colocarán las explicaciones y el SRC viene anexo en el tutorial.
Autor: klozz.
Importamos la librería de la oslib sin ella estaríamos trabajando en C normal oslib proporciona muchas nuevas funciones.
#include <oslib/oslib.h>
PSP_MODULE_INFO("nombre del homebrew o plugin",0 para homebrew 1 para PRX,1,1) los últimos son la versión, no por poner el 1 quiere decir que se compilara un plugin sino lo hacen desde el makefile se generara un eboot el 1 es para que sea funcionalidad para plugin ya que estos trabajan en modo Kernel. (Igual puedo equivocarme y si así es pueden corregirme).
PSP_MODULE_INFO("Lectura de controles OSLib", 0, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
Como todo programa debe tener un inicio y para C se utiliza el tipo de dato y el nombre main() desde donde se lea el main es donde comienza a leer el homebrew, de ahí parte para seguir el programa todo lo anterior no se toma en si como del programa.
int main() {
NOTA: Debemos recordar que debe haber una llave "{" para abrir y una para cerrar "}" sino al compilar les dará error ya que no encuentra el fin del código.
Se inicia la librería Oslib con el comando oslInit(0);
oslInit(0);
Iniciamos la parte gráfica indicando el formato de pixeles que queremos usar y si queremos usar doble buffer: void oslInitGfx(int pixelFormat, int bDoubleBuffer); usaremos OSL_PF_8888 para una pantalla de 32 bits o OSL_PF_5650 para 16 0 para buffer simple, 1 para buffer doble.
Usaremos en este caso para una pantalla de 32 bits y de solo buffer simple.
oslInitGfx(OSL_PF_8888, 0);
Iniciamos la pantalla para poder escribir en ella sin este comando no se mostraría nada de lo que mandemos a imprimir ya sea usando el comando.
oslPrintf o oslPrintf_xy oslInitConsole();
Iniciamos el Bucle principal de tipo while, en un bucle debe haber una "{" que abre y una "}" que cierra para que el compilador a la hora de crear el ejecutable sepa que el bucle finalizó y no quede en bucle infinito o en si de error de compilado.
while (!osl_quit) //Aquí negamos la operación de salir {
Nos permite pintar en la pantalla.
oslStartDrawing();
Ahora la función para leer los botones es oslReadKeys(); para los coders de lua viene siendo como el Controls.Read()
oslReadKeys();
Ahora limpiamos la pantalla con la función oslCls(); en lua era Screen.clear() para los de C normal era pspDebugScreenClear
oslCls();
Ahora para escribir en determinada coordenada de la pantalla con oslPrintf_xy le decimos, en pixeles, donde queremos escribir.
oslPrintf_xy(0,20,"Button tester – Leccion 2: Leer los botones en OSlib"); oslPrintf_xy(0,28,"--------------------------------------------------------------------------");
osl_keys->analogX devuelve la posición X del analógico y osl_keys->analogY devuelve la posición Y del analógico. Y ahora solo usamos la función para imprimir pantalla para que nos muestre como se encuentra el análogo.
oslPrintf_xy(40,40,"Analogico X : %d - Analógico Y : %d",osl_keys->analogX,osl_keys->analogY);
Esto está bastante claro pero igual lo explicare, aquí estamos viendo otro bucle llamado IF que en español es: SI, entonces en algoritmo sería así Si (leer boton->lugar.equis) imprimir_xy(pixelx 100, pixely 70,"X"); y bueno creo que explicando el primero lo demás es mas sencillo :)
if (osl_keys->held.cross) oslPrintf_xy(100,70,"X"); if (osl_keys->held.square) oslPrintf_xy(100,70,"CUADRADO"); if (osl_keys->held.circle) oslPrintf_xy(100,70,"O"); if (osl_keys->held.triangle) oslPrintf_xy(100,70,"TRIANGULO"); if (osl_keys->held.up) oslPrintf_xy(100,70,"ARRIBA"); if (osl_keys->held.down) oslPrintf_xy(100,70,"ABAJO"); if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA"); if (osl_keys->held.right) oslPrintf_xy(100,70,"DERECHA"); if (osl_keys->held.L) oslPrintf_xy(100,70,"L"); if (osl_keys->held.R) oslPrintf_xy(100,70,"R"); if (osl_keys->held.home) oslPrintf_xy(100,70,"HOME"); if (osl_keys->held.note) oslPrintf_xy(100,70,"NOTE"); if (osl_keys->held.select) oslPrintf_xy(100,70,"SELECT"); if (osl_keys->held.start) oslPrintf_xy(100,70,"START"); if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA"); if (osl_keys->held.hold) oslPrintf_xy(100,70,"HOLD");
Cerramos el modo dibujo lo usaremos siempre al final de las operaciones de pintar y usaremos oslEndDrawing(); para los coders de lua hm2 se les hará conocido para los user normales que quieran aprender pues ya se les hará familiar pronto.
oslEndDrawing();
Ahora debemos sincronizar la pantalla para que cuando sea presionado un botón este se muestre al mismo tiempo que es presionado y no haya errores al mostrarlos, usaremos oslSyncFrame();
oslSyncFrame(); }
Ahora debemos finalizar la parte grafica y usaremos oslEndGfx();
oslEndGfx();
Con este comando sale directamente al menú de la psp.
oslQuit(); return 0;
Con esto finalizamos el main del SRC (Source Code (código fuente)) y el compilador da por terminado el programa.
}
//importamos la librería #include <oslib/oslib.h> PSP_MODULE_INFO("Lectura de controles OSLib", 0, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); int main() { //con esta línea la librería ya se encarga de todos los callbacks //que se tenia que escribir un código extenso solo debemos iniciarla oslInit(0); //iniciamos la parte grafica indicando el formato de pixeles que queremos usar y si queremos usar doble buffer //void oslInitGfx(int pixelFormat, int bDoubleBuffer); //usaremos OSL_PF_8888 para una pantalla de 32 bits o OSL_PF_5650 para 16 //0 para buffer simple, 1 para buffer doble oslInitGfx(OSL_PF_8888, 0); //iniciamos la pantalla para poder escribir en ella oslInitConsole(); //Bucle principal while (!osl_quit) //Aquí negamos la operación de salir { //Nos permite pintar en la pantalla oslStartDrawing(); //leemos los botones oslReadKeys(); //limpiamos la pantalla oslCls(); //con oslPrintf_xy le decimos, en pixels, donde queremos escribir oslPrintf_xy(0,20,"Button tester – Leccion 2: Leer los botones en OSlib"); oslPrintf_xy(0,28,"--------------------------------------------------------------------------"); //osl_keys->analogX devuelve la posición X del analógico y osl_keys->analogY la Y oslPrintf_xy(40,40,"Analogico X : %d - Analógico Y : %d",osl_keys->analogX,osl_keys->analogY); //esto está bastante claro if (osl_keys->held.cross) oslPrintf_xy(100,70,"X"); if (osl_keys->held.square) oslPrintf_xy(100,70,"CUADRADO"); if (osl_keys->held.circle) oslPrintf_xy(100,70,"O"); if (osl_keys->held.triangle) oslPrintf_xy(100,70,"TRIANGULO"); if (osl_keys->held.up) oslPrintf_xy(100,70,"ARRIBA"); if (osl_keys->held.down) oslPrintf_xy(100,70,"ABAJO"); if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA"); if (osl_keys->held.right) oslPrintf_xy(100,70,"DERECHA"); if (osl_keys->held.L) oslPrintf_xy(100,70,"L"); if (osl_keys->held.R) oslPrintf_xy(100,70,"R"); if (osl_keys->held.home) oslPrintf_xy(100,70,"HOME"); if (osl_keys->held.note) oslPrintf_xy(100,70,"NOTE"); if (osl_keys->held.select) oslPrintf_xy(100,70,"SELECT"); if (osl_keys->held.start) oslPrintf_xy(100,70,"START"); if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA"); if (osl_keys->held.hold) oslPrintf_xy(100,70,"HOLD"); //cerramos el modo dibujo //lo usaremos siempre al final de las operaciones de pintar oslEndDrawing(); //sincronizamos la pantalla oslSyncFrame(); } //finaliza la parte grafica oslEndGfx(); //sale directamente al menú de la psp oslQuit(); return 0; }
TARGET = Botons OBJS = main.o INCDIR = CFLAGS = -G4 -Wall -O2 CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = STDLIBS= -losl -lpng -lz \ -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm LIBS=$(STDLIBS)$(YOURLIBS) EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Leccion 2:Control de botones en OSlib PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
Listo una lección más.
Descargar OSLib Control de Botones (Sólo Usuarios Registrados).
Comentarios
jajaja que morboso este klozz y sus tutos +5
muy buena XP por fin pude gracias 5 estrellas
By Jorge_97
Buen tuto compañero ;=)
Un saludo
Grax jorge
Grax jorge
Que onda Klozz, ye he hecho
Que onda Klozz, ye he hecho mi primer button tester, vamos progresando :D recuerdo que hace tiempo hubo muchos en portada XD
Jajajaja si , recuerdo esas
Jajajaja si , recuerdo esas epocas xD donde todos querian que su button tester estuviera en portada xD luego cuando empezé a sacar autoinstalers todo mundo queria hacer uno xD
TEAM MEX Homebrew y desarrollo PSP
Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .
Ubunshell VProof. (45%)C
RPG Magues (35%)Lua , 5% C
Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD
Xperience | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve
-- KLOZZ