Ir ao conteúdo
  • Cadastre-se

Iury Benites

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

7
  1. Caso alguém venha nesse post com a mesma dúvida, tá aqui um fluxograma bem simples da ordem a seguir. Map1.bmp
  2. @vangodp Lendo teu comentário em voz alta eu percebi meu erro (bem simples de resolver, inclusive). Na função que chamava a próxima tela (se o cursor estava numa das margens e clicava com o botão esquerdo), desenhava a imagem e já chamava al_flip_display(). Então quando eu desenhava a seta e usava al_flip_display(), ficava só a seta (erro de principiante, suponho). Sobre o código que tu postou, vou aproveitar com certeza o uso de vetores (considerando que todas as salas sempre terão 4 lados, posso usar um vetor estático sem problemas). Eu tinha tentado antes, mas esqueci que é um vetor de ponteiros. Acho que agora tenho o que é preciso pra terminar o jogo (mas antes, dar uma boa "limpa" no código, que tá cheio de coisas que não preciso mais)
  3. Ok, separei as funções entre "Carregar Background", "Exibir Background" e "Destruir Background". O problema é na hora de exibir. Essa demo que estou fazendo se trata de quatro backgrounds, como se fossem as paredes de uma sala. Quando o usuário coloca o cursor na margem esquerda ou direita, e clica, vai para a tela correspondente (e isso dá certo tranquilo). O problema é na hora de exibir uma seta para o usuário, indicando que ele está na posição correta. Segue o código: void DesenharSala(ALLEGRO_BITMAP *background1, ALLEGRO_BITMAP *background2, ALLEGRO_BITMAP *background3, ALLEGRO_BITMAP *background4, int numero, ALLEGRO_DISPLAY_MODE disp_data) { if(numero == 0) al_draw_scaled_bitmap(background1,0,0,XBKG,YBKG,0,0,disp_data.width,disp_data.height,0); else if(numero == 1) al_draw_scaled_bitmap(background2,0,0,XBKG,YBKG,0,0,disp_data.width,disp_data.height,0); else if(numero == 2) al_draw_scaled_bitmap(background3,0,0,XBKG,YBKG,0,0,disp_data.width,disp_data.height,0); else al_draw_scaled_bitmap(background4,0,0,XBKG,YBKG,0,0,disp_data.width,disp_data.height,0); } void DesenharSeta(ALLEGRO_BITMAP *seta, ALLEGRO_DISPLAY_MODE disp_data, int lugar) { if(lugar == DIREITA) al_draw_bitmap(seta, disp_data.width - 130, disp_data.height / 2, ALLEGRO_FLIP_HORIZONTAL); else al_draw_bitmap(seta, 0, disp_data.height / 2, 0); } O problema parece ser onde colocar a função "al_flip_display()". Se coloco antes da seta, ela não aparece, se coloco depois, o background some e fica só a seta.
  4. @CiroboyBR sim, faz bastante sentido, na verdade. O problema é que me baseei num tutorial que ensinava simplesmente a desenhar uma imagem e deu, e daí tentei expandir (a base de muita gambiarra, admito :v). Encontrava pouca coisa sobre allegro 5, muito menos bem explicado. Acredito que isso resolva tudo. Assim que eu implementar, eu posto aqui.
  5. @vangodp tô usando o allegro 5.0 no DevC++. Sobre o código, não tem nada muito complicado (o que me faz questionar porque não dá certo). void CarregarBackground(ALLEGRO_BITMAP *background, char NomeDoBackground[], ALLEGRO_DISPLAY_MODE disp_data) { //já tinha testado essa função antes, somente carregando e alternando backgrounds, e tava funcionando do jeito esperado background = al_load_bitmap(NomeDoBackground); al_draw_scaled_bitmap(background,0,0,XBKG,YBKG,0,0,disp_data.width,disp_data.height,0); //XBKG e YBKG são macros definindo o tamanho do arquivo de background, pra ampliar do tamanho certo al_flip_display(); al_destroy_bitmap(background); //Isso realmente soa muito estranho, mas se eu não destruísse o background imediatamente, ele não desocupava a memória, e com algumas mudanças de tela já travava tudo } void DesenharSeta(ALLEGRO_BITMAP *seta, ALLEGRO_DISPLAY_MODE disp_data) { al_draw_bitmap(seta, (disp_data.width)/2, (disp_data.height)/2, 0); al_flip_display(); al_destroy_bitmap(seta); }
  6. Oi, pessoal. Comecei a fazer um jogo point&click, que achei que seria um bom começo pra aprender a usar o Allegro. Quando o usuário clicasse na margem esquerda ou direita da tela, iria pra tela seguinte (como seria esperado). Entretanto, quando fui implementar uma seta pra indicar isso pro usuário, o background fica piscando. Tentei usar a função al_set_target_bitmap() pro background, mas o programa fecha na hora. Como faço então pra carregar um sprite sobre um background?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!