Home > Uncategorized > Criando Menu com OSLib

Criando Menu com OSLib

February 10, 2007 3 Comments »

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!

Comments:3

  1. Rafael Reply
    September 5, 2007 at 1:59 am

    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 Reply
    January 11, 2010 at 1:41 pm

    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

    • neyestrabelli Reply
      January 11, 2010 at 4:35 pm

      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.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>