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