Anuncios Google

OSLib - Módulo Image

Tutoriales Avanzados Homebrewes

Nivel Básico

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

3.97959
Tu voto: Ninguno Votos totales: 4 (49 votos)

Anuncios Google

Comentarios

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 Ricx-Dark

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"

Imagen de Dioni0396

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

 

Imagen de Ricx-Dark

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"

Imagen de Dioni0396

No, digo

que el oslDrawImage(m1); que tienes antes del bucle lo pongas donde te he dicho.

Despues de oslReadKeys();

Imagen de Ricx-Dark

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"

Imagen de Dioni0396

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

Imagen de Ricx-Dark

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"

Imagen de fernandodixon3

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

Imagen de User170294

Contactame por MP y te

Contactame por MP y te respondo pero explica mejor lo que quieres hacer ;)

Imagen de Dioni0396

De momento no tengo conocimiento alguno

sobre eso.

Imagen de User170294

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.


Imagen de klozz

Como que no hay muchos ¬¬ yo

Como que no hay muchos ¬¬ yo hice varios pero basico no los ponen en portada! Saludos

Imagen de User170294

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.

Imagen de Dioni0396

De nada

De nada

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.