Como habilitar e desabilitar um comando com a mesma tecla?

 
   3D Game Builder - Índice » Programação
Como habilitar e desabilitar um comando com a mesma tecla?
Autor Mensagem
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Como habilitar e desabilitar um comando com a mesma tecla?
Amigos

Nos scripts que estou fazendo, algumas variáveis precisam ser controladas por teclas então, usando o IsKeyPress, eu habilito elas com uma tecla, e com outra eu desabilito. Uso 2 teclas diferentes. Gostaria de simplificar fazendo a mesma coisa com apenas uma tecla, pressionando 1 vez habilitaria e pressionando ela de novo, desabilitaria.
Esse é um dos scripts que estou usando para para pausar o jogo com esse sistema de 2 teclas:

//---Begin Script Builder: Alterar a Variável Pausa em função de teclas P (play)=80 e S(Stop)=83) e exibir o estado no label---//
if (IsKeyPress(80))then
WriteGlobalVar('Pausa', 1);
if (IsKeyPress(83)) then
WriteGlobalVar('Pausa', 2);
SetLabelText('ON', IntToStr(ReadGlobalVar('Pausa')));
SetLabelText('Pontos', IntToStr(ReadGlobalVar('TiroRobo')));

//---End Script Builder---//

Abraço.



_________________
Lemos
http://alemdanimacao.zip.net/
Seg Ago 10, 2009 12:18 pm Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Re: Como habilitar e desabilitar um comando com a mesma tecl
Amigos

Estou tentando uma série de scripts aqui e o que eu consegui algum resultado (funciona, mas não como eu queria) foi esse aqui:

//---Begin Script Builder: Alterar a Variável Pausa em função da tecla P=80 e mostrar o resultado no Label---//
if (IsKeyPress(80)) then
begin
if ReadGlobalVar('Pausa') = 2 then
begin
WriteGlobalVar('Pausa', 1);
SetWaitKeyUp(80);
SetKeyUpOK(true);
end
else if ReadGlobalVar('Pausa') = 1 then
begin
WriteGlobalVar('Pausa', 2);
SetWaitKeyUp(80);
SetKeyUpOK(true);
end
end;
SetLabelText('ON', IntToStr(ReadGlobalVar('Pausa')));

//---End Script Builder---//

O Problema é que quando clico na tecla 80, "P", o valor fica mudando o tempo todo, numa fração de segundo, de modo que tenho que tentar várias vezes até o valor mudar e ficar estável ali, do jeito que eu quero, ou 1 ou 2. Se eu seguro a tecla, os valores ficam alternanando sem parar!
Eu sei que os comandos SetWaitKeyUp(80); e SetKeyUpOK(true); seriam para evitar essa transição, mas eu acho que não estou usando corretamente, pque não tá funcionando, mas o script é verificado pelo programa e não contém erros. O que está faltando?

_________________
Lemos
http://alemdanimacao.zip.net/
Seg Ago 10, 2009 5:23 pm Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Re: Como habilitar e desabilitar um comando com a mesma tecl
Acho que consegui com esse script, baseado no tutorial do diálogo no site, mas não consegui fazer com que o evento aconteça na primeira vez sem a tecla P seja pressionada DUAS vezes. Depois que você pressiona 2 x na primeira vez, a variável muda quantas vezes quisermos, teclando apenas 1x; não entendi onde inserir os conados SetWaitKeyUp(80); e SetKeyUpOK(true); para evitar que isso ocorra e baste teclar uma vez na tecla P para que ocorra a mudança na variável, como foi explicado no tutorial a que me referi:


//---Begin Script Builder: Alterar a Variável Pausa em função da tecla P=80 e mostrar o resultado no Label---//

if (IsKeyPress(80)) then
begin
if (ReadGlobalVar('Pausa') = 1) and ((GetWaitKeyIsUp)) then
begin
WriteGlobalVar('Pausa', 2);
end
else if (ReadGlobalVar('Pausa') = 2) and ((GetWaitKeyIsUp)) then
begin
WriteGlobalVar('Pausa', 1);
end;
SetWaitKeyUp(80);
end;
SetLabelText('ON', IntToStr(ReadGlobalVar('Pausa')));

//---End Script Builder---//

Só falta isso agora!



_________________
Lemos
http://alemdanimacao.zip.net/
Seg Ago 10, 2009 6:52 pm Exibir perfil de usuários
Edirlei
Administrador
Administrador


Registrado: 15/03/08
Mensagens: 760

Usando:

SetWaitKeyUp(80);
SetKeyUpOK(true);

No OnCreate do mapa deve resolver o problema.
Seg Ago 10, 2009 9:19 pm Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Edirlei escreveu:
Usando:

SetWaitKeyUp(80);
SetKeyUpOK(true);

No OnCreate do mapa deve resolver o problema.


Coloquei esse script no mapa OnCreate, mas não mudou nada. Confused Além disso, está acontecendo uma coisa estranha: nesse arquivo de testes tem um script padrão de contagem de tempo. Nele eu inseri uma condição que, para que a contagem continuasse normalmente, a variável Pausa teria que estar em 1. Quando usamos o sistema com a tecla P e ela muda para 2, o tempo pára. Se a tecla P for pressionada novamente, sem que esperemos muito tempo, ela volta para 1 e a contagem recomeça, mas se demorarmos muito tempo com a contagem parada, assim que clicamos em P e a variável volta para 1, o que liberaria a contagem, não acontece; ela fica parada um tempão, depois, da cabeça dela, recomeça, não é imediato. Isso é estranho, uma vez que a tecla muda a variável imediatamente e o script de contagem não tem nada a ver com a tecla P e sim com a variável Pausa. Se a variável mudasse para 1, que é o normal, a contagem deveria sempre recomeçar imediatamente, mas é o que eu disse, nem sempre acontece... Muito esquisito...
Confused

_________________
Lemos
http://alemdanimacao.zip.net/
Ter Ago 11, 2009 5:33 pm Exibir perfil de usuários
welgomes
Usuário
Usuário


Registrado: 10/07/11
Mensagens: 827
Localização: São Paulo - Capital

É antigo, mas aqui está a resposta:
post19609.html#19609
Qua Out 01, 2014 12:36 am Exibir perfil de usuários
   3D Game Builder - Índice » Programação
Página 1 de 1