Continuando la anterior entrega de los controles y stick, hoy les vamos a enseñar a imprimir una imagen en pantalla en OSlib. Con este tutorial manejaremos la imagen con nuestro pad llevándola donde queramos por la pantalla de nuestra PSP.
Lo primero que hacemos es bajar esta imagen de prueba que he subido yo personalmente y crear un archivo llamado main.c. Ahora explicaremos el code:
//Cargamos la libreria oslib #include <oslib/oslib.h> //Los callbacks que hacen que se establezca en modo user (Para este tuto nos servira) PSP_MODULE_INFO("Imagenes Sample", 0, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); //Definimos los punteros a nuestras imagenes OSL_IMAGE *fondo; u16 x=0; u16 y=0; int main() //Funcion principal { //Iniciamos la libreria oslib oslInit(0); //Iniciamos el modo grafico, el primer argumento indica los bits de pantalla (32) y el segundo el buffer (0 = Simple buffer, 1= Doble buffer) oslInitGfx(OSL_PF_8888, 1); //Cargamos las imagenes (Mas adelante lo explico) fondo = oslLoadImageFile("fondo.png", OSL_IN_RAM, OSL_PF_8888); //Comprobamos que las imagenes se han cargado correctamente, en caso contrario nos saldra este mensaje if (!fondo) oslDebug("Imposible cargar la imagen, algo falla!"); //Bucle infinito while (!osl_quit) { //Iniciamos el modo de dibujar, o por decirlo de otra forma activamos la pantalla oslStartDrawing(); //Leemos los controles oslReadKeys(); //Movemos la imagen if (osl_keys->held.down) y++; if (osl_keys->held.up) y--; if (osl_keys->held.left) x--; if (osl_keys->held.right) x++; //Dibujamos las imagenes oslDrawImageXY(fondo,x,y); //el primer argumento indica la imagen, el segundo la x de esta y el tercero la posicion y de esta //Terminamos de dibujar oslEndDrawing(); //Sincronizamos la pantalla, similar a screen.flip() en lua oslSyncFrame(); } //Terminamos el programa oslEndGfx(); oslQuit(); return 0; }
oslLoadImageFile("fondo.png", OSL_IN_RAM, OSL_PF_8888); /* En primer lugar existen varias formas de cargar la imagen, esta es la generalizada, pero tambien se puede hacer oslLoadImageFilePNG, que solo cargara imagenes en png. El primer argumento de la funcion indica donde esta la imagen, como se llama y que extension tiene, recordad que la imagen tiene que estar al lado del eboot El Segundo indica donde guardarlo, yo he elegido la ram El tercero indica en que bits deseas guardarlo, el que esta puesto es 32 bits, si pones 5551 cargaras la imagen en 16 bits*/
Aquí os pongo el makefile, es el mismo de la otra vez pero cambiado el nombre:
TARGET = Controles OBJS = main.o CFLAGS = -O2 -g -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = 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 LIBS=$(STDLIBS) LDFLAGS = EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Controles PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
Comentarios
Una pregunta Dioni0396, como
Una pregunta Dioni0396, como hiciera yo un codigo que ejemplo. Tengo 4 imagenes y si estoy en la imagen 1 al apretar abajo pase a la imagen 2, yo tengo algo parecido a:
cont=1;
oslDrawImage(m1);
while (!osl_quit) {
oslStartDrawing();
oslReadkeys();
if ((osl_keys->held.down) && (cont=1)) oslDrawImage(m2), cont=cont+1;
if ((osl_keys->held.down) && (cont=2)) oslDrawImage(m3), cont=cont+1;
if ((osl_keys->held.up) && (cont=3)) oslDrawImage(m2), cont=cont-1;
if ((osl_keys->held.up) && (cont=2)) oslDrawImage(m1), cont=cont-1;
oslEndDrawing();
oslSyncFrame();
oslEndGfx();
oslQuit();
return 0;
}
pero, no me da porque pasa de la imagen 1 a la 3 y de la 3 a la 1
te agradeceria si me ayudaras, gracias
Ricx-Dark
"El conocimiento es poder: no lo malgastes ni un solo dia aprende, aprende, aprende!"
"Para un soldado el arma es su vida pero este da muerte a los demas"
mete el oslDrawImage
dentro del while despues de oslReadKeys();
y cierra bien el bucle, tienes una incloncuencia y un error de sintaxis gordisimo, raro que el compilador no de errores.
Despues del oslSyncFrame(); no veo la } y eso puede dar errores, si pones tu code completo me aclararia mejor
Lo del } fue porque lo acabo
Lo del } fue porque lo acabo de hacer en la pag y no lo puse porque se me paso (no me gusta copiar + pegar jaja). y siguiendo con el tama me dices que quede haci
while (!osl_quit) {
oslStartDrawging();
oslReadKeys();
oslDrawImage //y porque queda haci (lo que pasa es que empece hace unos dias)
gracia!!1
Ricx-Dark
"El conocimiento es poder: no lo malgastes ni un solo dia aprende, aprende, aprende!"
"Para un soldado el arma es su vida pero este da muerte a los demas"
No, digo
que el oslDrawImage(m1); que tienes antes del bucle lo pongas donde te he dicho.
Despues de oslReadKeys();
Eso fue una de las primeras
Eso fue una de las primeras cosas que hice pero cada vez que le doy a "abajo" vuelve a la m1 y pense que nunca me ia a dar de esa forma porque como esta dentro del bucle cada vez que cambiara ia a la m1
Ricx-Dark
"El conocimiento es poder: no lo malgastes ni un solo dia aprende, aprende, aprende!"
"Para un soldado el arma es su vida pero este da muerte a los demas"
Reestructura
el codigo, usa el del ejemplo y el del resumen;
http://psp.scenebeta.com/node/87777
Veo que el error que tienes es que solo cambia la imagen cuando pulsas el boton, y vuelve a mantenerse.
Mirate el resumen y mira como cargo las imagenes
Muchas gracias dioni y
Muchas gracias dioni y tambien muchas gracias por responder rapido lo que pasa es que pienso hacer un gran juego para entrar en el concurso de este año y todos los dias a toda hora estoy estudiando estas cosas
aora a echarle coco a la pag que me mandaste porque como digiste ya ese esta a un nivel medio
Ricx-Dark
"El conocimiento es poder: no lo malgastes ni un solo dia aprende, aprende, aprende!"
"Para un soldado el arma es su vida pero este da muerte a los demas"
muy bueno 5 estrellas =D
muy bueno 5 estrellas =D una duda no sabes como crear un instalador para agregar archivos para flash 0 solo es una pregunta xD
Contactame por MP y te
Contactame por MP y te respondo pero explica mejor lo que quieres hacer ;)
De momento no tengo conocimiento alguno
sobre eso.
Buen aporte ;)
Buen tutorial Dioni ;) Espero que hagas muchos más, ya que en esta comunidad no hay tutoriales de OSLib y para mí es la mejor librería de C para desarrollar juegos facilmente :) Salu2.
Como que no hay muchos ¬¬ yo
Como que no hay muchos ¬¬ yo hice varios pero basico no los ponen en portada! Saludos
Pues eso tendrás que hablarlo
Pues eso tendrás que hablarlo con el Staff... ¿Me pasas un Link a tus tutoriales de OSLib? Salu2.
De nada
De nada