Ahora que tenemos una idea muy básica de lo que es la programacion en OSLib y como se maneja pues os pongo un ejemplo practico de uso de estas librerías, os dejo un paquete de imágenes que usaremos en nuestro code, tambien os dejo sonido y la fuente ya sabéis que podeis usar la de la PSP. En este resumen es posible que salgan un par de funciones que no hemos dado, tranquilos, explicare en un comentario la función.
Autor: Dioni0396.
Antes de empezar he de decir, que de aquí hacia atrás son todos tutoriales básicos, después de ver ésto empezamos con los niveles medios, incluiremos funciones mas avanzadas y demás. ¡Estate atento a nuevas entregas!
/* Resumen de lo aprendido I By Dioni0396, en este resumn no volvere a explicar las funciones dadas ya anteriormente, pero si las nuevas. El codigo, es de uso libre, pero no copieis trozos de codigo asi porque asi, sino nunca aprendereis. */ #include <pspkernel.h> #include <pspdebug.h> #include <oslib/oslib.h> PSP_MODULE_INFO("Resumen Sample", 1, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); PSP_HEAP_SIZE_KB(18*1024); struct{ int x; int y; OSL_IMAGE *sprite; } J1; void Declarar_Structuras(){ J1.x = 100; J1.y = 100; oslSetTransparentColor(RGB(255,0,0)); J1.sprite = oslLoadImageFilePNG("Sprite.png",OSL_IN_RAM,OSL_PF_5551); oslDisableTransparentColor(); } OSL_FONT *Fuente; OSL_IMAGE *Fondo, *Opciones, *Acerca, *FondoNegro; OSL_SOUND *MiSonido; void CargaFuente(){ oslIntraFontInit(INTRAFONT_CACHE_LARGE); Fuente = oslLoadFontFile("flash0:/font/ltn0.pgf"); oslSetFont(Fuente); } void CargaImagen(){ Fondo = oslLoadImageFilePNG("Fondo.png",OSL_IN_RAM,OSL_PF_8888); Opciones = oslLoadImageFilePNG("Opciones.png",OSL_IN_RAM,OSL_PF_8888); Acerca = oslLoadImageFilePNG("AcercaDe.png",OSL_IN_RAM,OSL_PF_8888); FondoNegro = oslLoadImageFilePNG("Negro.png",OSL_IN_RAM,OSL_PF_8888); } void CargaSonido(){ MiSonido = oslLoadSoundFileMP3("SonidoFondo.mp3",OSL_FMT_STREAM); if (!MiSonido) oslDebug("Este era el p*** error"); //Censurado por Dovemac xDD } u8 Sel=1; u8 Anim=0; u8 Comienza=0; u8 OpcionElegida = 0; //Aclaracion, 0=Menu, 1=Juego, 2=Opciones, 3=Acerca De... (Para el menu) void Controles(){ if (osl_keys->pressed.down) Sel++; if (osl_keys->pressed.up) Sel--; } void Menu(char* Opcion1,char* Opcion2,char* Opcion3,char* Opcion4){ if(OpcionElegida==0){ oslStartDrawing(); oslReadKeys(); oslDrawImageXY(Fondo,0,0); Controles(); if(Sel<1) Sel=4; if(Sel>4) Sel=1; oslDrawString(47,88,Opcion1); oslDrawString(270,120,Opcion2); oslDrawString(50,185,Opcion3); oslDrawString(200,230,Opcion4); if(Sel==1){ oslDrawString(17,88,"-->"); //Mas o menos calculo donde estara la flecha. if(osl_keys->pressed.cross) OpcionElegida=1; } if(Sel==2){ oslDrawString(240,120,"-->"); if(osl_keys->pressed.cross) OpcionElegida=2; } if(Sel==3){ oslDrawString(20,185,"-->"); if(osl_keys->pressed.cross) OpcionElegida=3; } if(Sel==4){ oslDrawString(170,230,"-->"); if(osl_keys->pressed.cross) oslQuit(); } oslEndDrawing(); oslSyncFrame(); } if(OpcionElegida==1){ oslStartDrawing(); oslReadKeys(); if(osl_keys->held.up){ J1.y=J1.y-2; Anim++; oslSetImageTileSize(J1.sprite,(Anim * 22),35,22,35); if(Anim==6) Anim=0; Comienza=1; } if(osl_keys->held.down){ J1.y=J1.y+2; Anim++; oslSetImageTileSize(J1.sprite,(Anim * 22),0,22,35); if(Anim==6) Anim=0; Comienza=1; } if(osl_keys->held.right){ J1.x=J1.x+2; Anim++; oslSetImageTileSize(J1.sprite,(Anim * 22),70,22,35); if(Anim==6) Anim=0; Comienza=1; } if(osl_keys->held.left){ J1.x=J1.x-2; Anim++; oslSetImageTileSize(J1.sprite,(Anim * 22),105,22,35); if(Anim==6) Anim=0; Comienza=1; } if(Comienza==1){ oslCls(); //Esta funcion limpia la pantalla para que el sprite no se quede una encima del otro. Si teneis curiosidad quitarlo y vereis que pasa. oslDrawImageXY(J1.sprite,J1.x,J1.y); } if(osl_keys->pressed.circle) OpcionElegida=0; oslEndDrawing(); oslSyncFrame(); } if(OpcionElegida==2){ oslStartDrawing(); oslReadKeys(); oslDrawImageXY(Opciones,0,0); oslDrawString(100,100,"Bueno, aqui ya harias tu lo que quisieras\n\n Sigue disfrutando de la aplicacion"); if(osl_keys->pressed.circle) OpcionElegida=0; oslEndDrawing(); oslSyncFrame(); } if(OpcionElegida==3){ oslStartDrawing(); oslReadKeys(); oslDrawImageXY(Acerca,0,0); oslDrawString(100,100,"Bueno, aqui ya harias tu lo que quisieras\n\n Sigue disfrutando de la aplicacion"); if(osl_keys->pressed.circle) OpcionElegida=0; oslEndDrawing(); oslSyncFrame(); } } int main(){ oslInit(0); oslInitGfx(OSL_PF_8888,1); oslInitAudioME(3); Declarar_Structuras(); CargaImagen(); CargaSonido(); CargaFuente(); oslPlaySound(MiSonido,1); oslSetSoundLoop(MiSonido,1); //Esta es la nueva funcion, es una funcion que hara que siempre se repita la cancion, el primer argumento recibe la musica y el segundo es para decir que si reproduce o no //Siempre necesita antes el oslPlaySound para poder hacer el bucle, y siempre fuera del while! while(!osl_quit){ Menu("Comenzar","Opciones","Acerca de...","Salir"); } oslEndGfx(); oslQuit(); return 0; }
Parece muy complicado pero no lo es, solo me tiro media hora en hacerlo todo, y dejarlo sin fallos.
TARGET = Resumen 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 = Resumen PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
Así es como quedaría el menú y el "juego":
*Captura del menú.
*Captura del "juego".
Se adjunta, además de los archivos necesarios, el PSD de los gráficos proporcionado por el autor (su descarga es opcional).
Archivos Necesarios (Sólo Usuarios Registrados).
PSD (Sólo Usuarios Registrados).
Comentarios
este es el main, asi lo tuve
este es el main, asi lo tuve que modificar
Y cual seria mejor usar... la version MOD de oslib o cualquiera de las 2 es buena?
me da error
esta linea me da error oslIntraFontInit(INTRAFONT_CACHE_LARGE);
por que ????..
Pues
Pues no lo se, me dices el error del compilador?
PD: Yo compile esto antes de subirlo a la web en linux.
Creando Archivo... Espere...
psp-g++ -I. -IC:/PSPDev/psp/sdk/include -O2 -g -G0 -Wall -I. -IC:/PSPDev/psp/sdk
/include -O2 -g -G0 -Wall -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150 -c -
o main.o main.cpp
main.cpp:17: warning: non-local variable '<anonymous struct> J1' uses anonymous
type
main.cpp: In function 'void CargaFuente()':
main.cpp:29: error: 'INTRAFONT_CACHE_LARGE' was not declared in this scope
main.cpp:29: error: 'oslIntraFontInit' was not declared in this scope
make: *** [main.o] Error 1
Terminado
Gracias por la atencion.
no entiendo por que si se supone son constantes declaradas por la Oslib o estoy mal ???.
Gracias Scenebeta por ser la mejor comuna de scene en español
Dame el main.c
Por favor.
http://pastebin.com/NgUtbTeE
http://pastebin.com/NgUtbTeE
aqui ta en pastebin segun yo hice copy paste del que tu pones.
yo estoy usando oslib 2.10 .. y he visto que las intrafonts tan implementadas en un mod 1.1.0 sera que la 2.10 no incluye eso de intrafonts ??
Gracias Scenebeta por ser la mejor comuna de scene en español
Efectivamente
Las oslib 2.10 no incluye esa funcion, solo la incluye las oslib mod.
Te recomiendo que elimines la funcion oslintrafontinit, y pruebes. y luego lo veas en la psp
Sobre el struct no tengo ni idea. El struct esta perfecto.
Okas muchas gracias
Okas muchas gracias
LOOOL
if (!MiSonido) oslDebug("Este era el **** error");
, XD, hasta Dioni se equivoca jajajaja.Otra cosa, ¿No era mejor utilizar la sentencia
switch
para las opciones del menú? Es que a mi me parece más lógico, y creo que es más rápidaEditado: El uso de palabras inadecuadas podría resultar ofensivo para ciertos usuarios y va en contra de las Normas de la Comunidad, antes de volver a postear por favor revíselas.| Rober Galarga
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).
...
No cambie eso.... LOL Cuando trabajaba use eso mientras intentaba hacer que funcionara, y puse eso.... Que verguenza xD
Em sobre lo de switch tienes razon, pero al ser un tutorial Basico pues eso.
Le hice un arreglillo jejej
Le hice un arreglillo jejej
Buen tuto Dioni, me han
Buen tuto Dioni, me han ayudado mucho y cada vez entiendo mas, este tuto no lo entendia y ahora con tu ayuda ya lo entiendo
Gracias :)
Gracias
Excelente.
Lo cierto es que está genial, aunque haya gente que diga que no lo explicas, se entiende perfectamente.
Un saludo.
Gracias
Gracias
hola tengo una duda, ya
hola
tengo una duda, ya quite lo de oslIntraFont porque no me lo reconoce, y tanto mp3 como png, tuve que modificarlo y solo dejarlo como oslLoadImageFile y oslLoadSoundFile, y use un wav
depues de eso logre compilarlo, pero a la hora de usarlo en el psp, no me aparcen las opciones, si intento meterme en las opciones si lo hace correctamente, pero lo que son -->Comenzar, etc, no me aparecen
que podria ser lo que pasa que lo unico que no se muestra son las opciones?
y me podrias decir cual es la diferencia entre OSLib y OSLib MOD?
gracias, salu2
pues muchisimas
muchisimas, casi innombrables.
Deja el main.c para ver tu error.