Criando Menu com OSLib

Hoje mostrarei com criar um menu simples utilizando a biblioteca OSLib.

O resultado final que teremos é este:
Menu OSLib

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!

0 pensou em “Criando Menu com OSLib

  1. Rafael

    Ae Ney, esotu tentando aprender a programacao com o psp..Instalei o Visual Studio 2005..to fazendo tudo igual a um tutorial em frances que vc colocou aki..mas nao ta funfando..da uns erros na hora de compilar…pode me ajudar? Eu tenho vc no msn, mas nunca te encontro online….falows!
    Rafael Spessotto

  2. Maknollram

    E AE KRA BLZ. PO PARABÉNS RODOU QUE É UMA BLZ. MAS PO TEM COMO TU ME MANDAR OU POSTAR AKI COMO FAÇO PARA ENTRAR EM UMA DESTAS OPÇÕES E FAZER AS ESCOLHAS DE CHAR POR EXEMPLO NA OPÇÃO INICIAR. VLW

    1. neyestrabelli

      Eae !!! Eu estou meio enferrujado quando programação para PSP, mas o que você pode fazer é o seguinte, se o cara apertar o botão X, você checa que posição do Menu está e inicia o jogo por exemplo, mais ou menos assim:

      if (osl_keys->pressed.cross) {
      switch(posMenu){
      case 0:
      IniciaGame();
      break;
      case 1:
      iniciaInstrucoes();
      break;
      }
      }

      E assim por diante.