Hoje mostrarei com criar um menu simples utilizando a biblioteca OSLib.
O resultado final que teremos é este:
Entendo este fonte você estará apto a trabalhar com imagens, texto em console, movimentação de imagem, controles.
Eis o codigo fonte:
main.c
/*
Exemplo de menu utilizando OSLib
Autor : Ney Estrabelli
Data : 10/02/07
*/
#include
PSP_MODULE_INFO("Tutorial Menu by Old!", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
void menu();
int main()
{
oslInit(0); //inicia a biblioteca
oslInitGfx(OSL_PF_8888, 1); // seta o tipo de grafico
oslSetTransparentColor(RGB(255,0,255)); // seta a cor transparente
oslInitConsole(); // inicia o texto em console
menu(); // chama a função menu
oslEndGfx(); // finaliza os gráficos
oslQuit(); // finaliza a biblioteca
return 0;
}
void menu(){
OSL_IMAGE *textos, *bg; //definimos os ponteiros para imagens
//carregamos as imagens
textos = oslLoadImageFile("./imagens/textos.png", OSL_IN_RAM, OSL_PF_5551);
bg = oslLoadImageFile("./imagens/bg.png", OSL_IN_RAM, OSL_PF_5551);
textos->x = 260; //definimos a posição x da imagem de textos
textos->y = 100; //definimos a posição y da imagem de textos
bg->x = 252; //definimos a posição x da imagem bg
bg->y = 72; //definimos a posição y da imagem bg
int posMenu = 0; //variavel de posição do menu
while (!osl_quit)
{
oslStartDrawing(); //iniciamos o desenho em tela
oslDrawGradientRect(0,0,480,272,RGB(0,0,0),RGB(255,255,255),RGB(255,255,255),RGB(0,0,0)); //desenha o fundo com gradiente preto e branco
oslDrawImage(bg); //desenhamos o bg
oslDrawImage(textos); //desenhamos os textos
oslReadKeys(); //inciamos os botoes
oslPrintf_xy(0, 0, "y = %i", bg->y); //escrevemos a posição y da imagem bg
oslPrintf_xy(0, 20, "posMenu = %i", posMenu); //escrevemos a posição do menu
if (osl_keys->pressed.down) { //se for pressionado para baixo
switch(posMenu) { //verficamos a posição do menu
case 0:
bg->y = 115; //desenhamos bg embaixo de instrucoes
posMenu = 1; //setamos a posição do posMenu para 1
break;
case 1:
bg->y = 155; //desenhamos bg embaixo de opcoes
posMenu = 2; //setamos a posição do posMenu para 2
break;
case 2:
bg->y = 198; //desenhamos bg embaixo de creditos
posMenu = 3; //setamos a posição do posMenu para 3
break;
case 3:
bg->y = 198; // mantemos o bg desenhado em creditos / aqui poderia voltar para 72
posMenu = 3; //mantemos o valor / aqui poderia voltar para 0
break;
}
}
if (osl_keys->pressed.up) { //se for pressionado para cima
switch(posMenu) { //mesma checagem anterior, porém ao apertar para cima
case 0:
bg->y = 72;
posMenu = 0;
break;
case 1:
bg->y = 72;
posMenu = 0;
break;
case 2:
bg->y = 115;
posMenu = 1;
break;
case 3:
bg->y = 155;
posMenu = 2;
break;
}
}
if (osl_keys->pressed.select) { //se for pressionado select, tira uma screenshot
oslWriteImageFile(OSL_SECONDARY_BUFFER, "screenshot.png", 0); //grava a screenshot
}
if (osl_keys->pressed.start) oslQuit(); //se for pressionado start sai do programa, voltando pro XMB
oslEndDrawing(); //finaliza a função de desenhar na tela
oslSyncFrame(); //sincroniza os frames
}
}
o makefile:
TARGET = main
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 = "Exemplo Menu"
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Como de costume, não irei explicar passo a passo pois o código fonte já está muito bem comentado, caso você tenha alguma dúvida, não deixe de perguntar, mais info sobre a biblioteca consulte : Documentação OSLib-pt-BR
Para baixar os arquivos de exemplo(source) + versão para rodar no psp com firmware custom OE****
Menu OSLib by Old!