[ +/- ] [ Data/Hora: 23 Mai 2013, 00:21 ]


Criar um novo TópicoWrite comments Página 1 de 1   [ 10 posts ]
Autor Mensagem
 Assunto da Mensagem: Tecla ou botão precionado
MensagemEnviado: 24 Fev 2010, 17:02 
Membro Júnior

Registado: 24 Fev 2010, 16:59
Mensagens: 52
Estou usando o Dev-C++

A função readkey() para a execusão do programa até que alguma tecla do teclado seja precionada.

Existe alguma função que além do teclado aceite também algum botão do mouse?


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 24 Fev 2010, 17:55 
Membro Sênior

Registado: 22 Jan 2004, 13:06
Mensagens: 324
Localização: Brasil
Acho que não. Acho que se quiser algo deste tipo, você mesmo deve implementar. No allegro, você utiliza a variável global mouse_b para saber os estados atuais dos botões do mouse (pressionado ou não).
Code:
if(mouse_b & 1) // Testando se o botao esquerdo esta sendo pressionado
{ ... }

if(mouse_b & 2) // Testando se o botao direito esta sendo pressionado
{ ... }

if(mouse_b & 4) // Testando se o botao central esta sendo pressionado
{ ... }


Pode ser que este link tire algumas dúvidas suas:
http://www.allegro.cc/manual/api/mouse-routines/mouse_b


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 24 Fev 2010, 19:09 
Membro Júnior

Registado: 24 Fev 2010, 16:59
Mensagens: 52
o trecho do codigo é o seguinte:
do
{
readkey();
}
while( EBE () );


dentro do loop ele mostra umas imagens tipo um menu, tem uns ifs também, mas não vem ao caso...

a questão é que se precionar o botão x o usuario terá que apertar alguma tecla do teclado

já se ele precionar a tecla esc o jogo sai pois a função EBE verifica se a tecla esc foi precionada ou se o botão de fechar precionado


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 24 Fev 2010, 21:26 
Membro Sênior

Registado: 22 Jan 2004, 13:06
Mensagens: 324
Localização: Brasil
Neste link mostra como utilizar a função set_close_button_callback(). Com ela você consegue saber quando o usuário clica no "X" da janela e realizar alguma operação:
http://www.allegro.cc/manual/api/using-allegro/set_close_button_callback


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 25 Fev 2010, 04:53 
Membro Júnior

Registado: 24 Fev 2010, 16:59
Mensagens: 52
na pagina http://www.allegro.cc/manual/api/using- ... n_callback temos a função de "fechar" o programa

void close_button_handler(void)
{
close_button_pressed = TRUE;
}
END_OF_FUNCTION(close_button_handler)


eu até poderia fechar o programa nessa função com a função exit() , mas não posso pois existem bitmaps que precisam ser "destruidos"


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 25 Fev 2010, 11:29 
Membro Sênior

Registado: 22 Jan 2004, 13:06
Mensagens: 324
Localização: Brasil
Observe que no exemplo ele não usa funções dentro da callback. Há uma recomendação do allegro que as operações em callbacks sejam as mais simples possíveis para evitar problemas.

Usando esta função do exemplo você ainda pode destruir seus bitmaps. Exemplo:

Code:
void close_button_handler(void)
{
close_button_pressed = TRUE;
}
END_OF_FUNCTION(close_button_handler)
...
BITMAP* buffer = create_bitmap(SCREEN_W, SCREEN_H);
...
while(!close_button_pressed)
{
}
...
destroy_bitmap(buffer); // Aqui!!


A callback apenas altera o valor de uma variável close_button_pressed. O que vai acontecer é que, quando o usuário clicar no "X" ele vai setar o valor da variável para true, fazendo com que ele saia do while e não do programa. Sendo assim, após o while você pode destruir todos os bitmaps alocados e realizar outros procedimentos de finalização.


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 25 Fev 2010, 14:42 
Membro Júnior

Registado: 24 Fev 2010, 16:59
Mensagens: 52
o meu codigo é o seguinte:

do
{
readkey();
}
while( EBE () );

a função EBE :

bool EBE(void)
{
return ( (!key[KEY_ESC]) && ( !fecharJogo ) && (!key[KEY_ENTER]) );
}


Estou tentando fazer um menu com vários submenus com o mesmo tipo de problema. Quero que o programa saia do loop até as teclas esc e enter serem precionadas ou o botão fechar.

Necessito de uma função que pare o programa até que algo seja precionado. No caso quando retiro a função readkey() ele passa direto sobre os outros menus.

Pode haver outros jeitos de se fazer um menu usando allegro?


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 25 Fev 2010, 18:07 
Membro Sênior

Registado: 22 Jan 2004, 13:06
Mensagens: 324
Localização: Brasil
Entao, pelo que entendi, seu problema nao é com a callback de fechar a janela.

Já tentou fazer uma funcao assim?
Code:

void esperaEntrada()
{
   while(true)
   {
      if(keypressed() || (mouse_b & 1))
        return;
   }
}



Porém aqui há um problema. Como a expressão (mouse_b&1) apenas testa se o botao esquerdo está pressionado, ela não é capaz de saber se houve um click no mouse. Você deve implementar alguma forma de saber se o botão foi clicado.

Este exemplo, apesar de incompleto deve te dar uma luz.

O melhor mesmo é criar um sistema de menus/submenus.


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 28 Fev 2010, 12:10 
Membro Júnior

Registado: 24 Fev 2010, 16:59
Mensagens: 52
Consegui!!!

Obrigado a todos que me ajudaram e desculpe pela demora em responder

A minha solução foi a seguinte:

Primeiramente não é necessário mecher com nenhuma função do mouse,
apenas com a variavel que controla se o botão fechar foi precionado...
Segundo não existe uma meneira melhor do que a outra de se programar...

Logo, o código dicou desta meneira:
do
{
//Antes do if mostra-se algumas imagens
if (keypressed())
{
if((key[KEY_ESC]==FALSE)&&(fecharJogo==FALSE))
//A condição no if era representado pela função EBG()
{
if(key[KEY_UP])
{//Espaço para código
}
if(key[KEY_DOWN])
{//Espaço para código
}
clear_keybuf();
}
}
}
while ( ( key[KEY_ESC] == FALSE ) && ( fecharJogo == FALSE ) &&
( key[KEY_ENTER] == FALSE ) );
//A condição no loop era representada pela função EBE()


Topo
 Perfil  
 
 Assunto da Mensagem: Re: Tecla ou botão precionado
MensagemEnviado: 01 Mar 2010, 10:21 
Membro Sênior
Avatar do Utilizador

Registado: 12 Mar 2006, 21:01
Mensagens: 581
Localização: Brasil
Até onde eu entendi, você tá tentando fazer um menu correto?
Se sim, pra que "travar" a aplicação pra cada menu? (A não ser claro que sua aplicação não seja um jogo e também não seja gráfica).
Da uma olhada nessa tentativa de jogo, e você vai ver que não é preciso preciso ficar esperando tecla pra executar uma ação: http://www.calangodev.com/arquivos/Mans ... osa.tar.gz

_________________
Blog só pra dizer que tenho
Games:
- The Lost Temple of Jewels (Android)
Extras:
- Meus Desenhos


Topo
 Perfil  
 
Mostrar mensagens anteriores:  Ordenar por  
Criar um novo TópicoWrite comments Página 1 de 1   [ 10 posts ]
Similar topics
Dúvida: Apertando uma tecla, enviando mais que uma
Fórum: Assembly
Autor: apaul
Respostas: 3
(DUV) Caixa e botão - evento
Fórum: Unity3D
Autor: XN4k3D
Respostas: 5
Botão "Abrir Form2"
Fórum: C/C++
Autor: joelcarlos
Respostas: 3
apenas 1 tecla
Fórum: C/C++
Autor: ArK_Anjo
Respostas: 17
verificar se botao do mouse esta apertado
Fórum: Pascal/Delphi
Autor: morppheus
Respostas: 3
Topo


Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes


Criar Tópicos: Proibído
Responder Tópicos: Proibído
Editar Mensagens: Proibído
Apagar Mensagens: Proibído

Pesquisar por:
Ir para:  

cron


Powered by phpBB ©

Virtual Object Informtica Ltda. Fone/Fax: (15)3231-6840