Ahora, que ya hemos avanzado en materia, que ya sabemos como manejar archivos y que ya sabemos como exprimir la PSP, es hora de usar todas las herramientas que tiene el sistema PSP para exprimir aún más las oportunidades que nos ofrece este lenguaje.
Autor: Dioni0396.
Para usar el teclado, también necesitamos las OSLib Mod , aquí tenéis un enlace para bajar estas librerías. Seguramente os preguntareis, ¿Como se si las tengo o no? Pues bien, coged este código y compilarlo, si da éxito es que las tenéis.
Bien, empecemos:
//Necesitaremos una variable para empezar. u8 Teclado = 0; //Ahora partimos de que ya estamos en el while y en una sentencia queremos escribir algo: if(osl_keys->pressed.cross){ if (Teclado == 0){ oslInitOsk("Introduce tu nombre", "", 20, 1, 3); /*Explicación: Esta función sirve para iniciar el OSK y al mismo tiempo insertar los datos que queremos, esto no hace visible el OSK (Mas adelante lo haremos visible). El primer argumento nos pone un texto en la parte derecha e inferior de la pantalla el char que queramos. El segundo es para tener un texto introducido previamente. El tercero limita el numero de caracteres y el cuarto el numero de lineas. El quinto dictamina el idioma, aquí tenéis una lista: ENGLISH 1 FRENCH 2 SPANISH 3 GERMAN 4 ITALIAN 5 */ Teclado = 1; //Me salto a otra sentencia ya que sino estaríamos siempre aquí. } if (Teclado == 1){ oslDrawOsk(); //Dibujamos el teclado. if (oslGetOskStatus() == PSP_UTILITY_DIALOG_NONE){ //Esto quiere decir: Si el estado del teclado == Ninguna acción realizada entonces... if (oslOskGetResult() == OSL_OSK_CANCEL){ //Si cancela... Teclado = -1; //Nos vamos } else{ /*Sino...*/ char Datos[20] = ""; oslOskGetText(Datos); //Introducimos los datos en un char. No se permite otro puntero Teclado = 2; //Nos salimos } oslEndOsk(); //Cerramos el teclado. } } Teclado = 0; //Lo volvemos a poner en la misma variable para reusarlo }
Sencillo, no? Esta muestra la podemos adaptar a una función fácilmente, e incluso podemos usarlo para guardar datos.
Os dejo también el makefile que uso para cargar el teclado:
TARGET = OSK OBJS = main.o CFLAGS = -O2 -g -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = MYLIBS= STDLIBS= -losl -lpng -lz \ -lpsphprm -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspgum -lpspaudiolib -lpspaudio -lpsphttp -lpspssl -lpspwlan \ -lpspnet_adhocmatching -lpspnet_adhoc -lpspnet_adhocctl -lm -ljpeg -lpspaudiocodec LIBS=$(STDLIBS) $(MYLIBS) LDFLAGS = EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = OSK PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
Así nos quedaría nuestro teclado una vez compilado y ejecutado:
Si tienen dudas, pregúntenlas.
Comentarios
Duda sobre funcionamiento
Hola.
Pues ya probé el código pero no logré hacerlo funcionar en su totalidad. Y también, ¿cómo quedaría el código para manejarlo como una función fuera del "main"? Digamos por ejemplo, que cuando presiono la cruz (X) aparezca el teclado y lea una cadena (en una función externa al "main"), pero al terminar de la lectura del OSK regrese al "main" e imprima esa cadena.
Lo que quiero es tener la función almacenada en un archivo *.h para reutilizarla con varios programas. Solamente necesito esto, que sea capaz de leer una cadena y regresarla a la función principal, para así por ejemplo hacer que lea números, cadenas, flotantes, etc. y poder hacer operaciones con ello.
Gracias de antemano y ojalá me pudieras resolver la duda.