Entrada de Texto no Allegro

Livros - Submarino.com.br

Não é de hoje que as pessoas buscam por métodos para fazer entrada de textos no Allegro, que por sua vez, não nos oferece nenhuma opção concreta, apenas algumas funções para entrada de teclas, e indentificação das mesmas.

Há um tempo atrás, eu também precisei disto, então vi que no site da Allegro.cc continha um exmeplo, então adaptei-o para minha necessidade. Muitas pessoas me perguntam como fazer isso, então, hoje só passo a função modificada que fiz desta, e até que ela anda servindo para bastante gente! hehehe

Por isso resolvi postar aqui. Ela ainda está primitiva, com muitos bugs, mas acredito que sirva para muitas coisas, aqui vai ela:

char *getText(int x, int y, BITMAP *buff, int cor)
{
     char    edittext[128];
     BITMAP *fundo = buff;
     BITMAP *buffer = create_bitmap(screen->w, screen->h);
     
     int     caret  = 0;
     
     int l = 0;

     memset(edittext, 0, sizeof(edittext));
     
     while (l == 0)
     {
           clear(buffer);
           draw_sprite(buffer, fundo, 0, 0);
           vline(buffer, ( caret * 8 ) + x, y-2, y+8, cor);
           if(keypressed())
           {
                    int  newkey   = readkey();
                    char ASCII    = newkey & 0xff;
                    char scancode = newkey >> 8;

                    /* a character key was pressed; add it to the string */
                    if(ASCII >= 32 && ASCII <= 126)
                    {
				             if(caret < 128 - 1)
				             {
				    	              edittext[caret] = ASCII;
					                  caret++;
					                  edittext[caret] = '';
                             }        
                    }
                    else if(scancode == KEY_BACKSPACE)
                    {
                         if (caret > 0) caret--;
                         edittext[caret] = '';
                    }
                    else if(scancode == KEY_ENTER)
                    {
				         l = 1;
                    }
             }
             textprintf_ex(buffer, font, x, y, cor, -1, "%s", edittext);
             blit(buffer, screen, 0, 0, 0, 0, 320, 240);
      }

      /*destroy_bitmap(buffer);
      destroy_bitmap(fundo);*/
      
      return edittext;
}

Os parâmetros dela, são respectivamente:
x: posição na coordenada X que vai conter o texto digitado
y: posição na coordenada Y que vai conter o texto digitado
buff: Bitmap de fundo, que vai ser mostrado enquanto você digita
cor: A cor em que vai ser mostrado o texto

Para usá-la, basta criar uma string:

char string[128];
memset(string, 0, sizeof(string));

E então copiar o resultado da função getText para esta string, assim:

strcpy(string, getText(10,10,buffer,0xFFFFFF));

Está simples, mas funciona, né! hehehe

5 Respostas

  1. Cara… estou quebrando a cabeça com esse negócio de entrada de texto em Allegro… Estou fazendo um jogo de raciocínio, onde o usuário tem que digitar uma resposta pra uma questão… porém a funçãozinha que eu fiz utiliza o comando Readkey. Só que estou tendo problemas quando jogo essa função dentro do looping principal, pois a readkey pára a execução à espera de uma tecla…

    Mas vou ver o que consigo fazer com esse código seu… espero que dê certo, pois este projeto precisa estar pronto em 1 mês e meio…

    Até breve, por enquanto!!!

  2. Olá,

    Essa função também é “bloqueadora”, pára a execução do programa até que seja adicionado um texto, porém você pode implementar o conteúdo da função diretamente no seu Loop principal, aí funciona perfeitamente.

    Qualquer dúvida, só postar! =)

  3. Na linha 4, o bitmap fundo recebe “buff”. O que seria isso, pois ele não foi declarado e, com isso o código não compila…

  4. Realmente estou com dificuldades… eu retirei o mouse, coloquei um bitmap no fundo pra não ter que ficar atualizando a tela. Aí fiz uma função utilizando o comando readkey. Porém, ao teclar “Backspace”, o programa não apaga o último caracter… ou seja, as letras vão ficando sobrepostas uma à outra…

    A propósito, tenho interesse em ajudar no Allegro Brasil!!

  5. heheh já vi de onde vem o buff…

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: