RegistrarBuscaFAQMembrosGruposEntrar
Script que tira da tela cheia com movimentos do mouse - erro

 
Responder tópico    3D Game Builder - Índice » Programação Exibir tópico anterior
Exibir próximo tópico
Script que tira da tela cheia com movimentos do mouse - erro
Autor Mensagem
Lemos
Usuário
Usuário


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

Mensagem Script q tira da tela cheia com movimentos do mouse - erro! Responder com citação
Os scripts a seguir foram verificados pelo programa e não tem erros:

//---Begin Script Builder: alterar a variável Configurar em função dos movimentos do mouse---//
if (ReadGlobalVar('Pausa') = 0) and (ReadGlobalVar('Configurar') = 0) then
begin
WriteGlobalVar('MouseX', GetWindowMousePositionX );
WriteGlobalVar('Pausa', 1 );
end
else if (ReadGlobalVar('Pausa') = 1) and (ReadGlobalVar('Configurar') = 0) and ((ReadGlobalVar('MouseX') > GetWindowMousePositionX + 10) or (ReadGlobalVar('MouseX') < GetWindowMousePositionX - 10)) then
begin
WriteGlobalVar('Configurar', 1 );
WriteGlobalVar('Pausa', 0 );
end;
//---End Script Builder---//

No evento OnCreate do mapa a variável Pausa está em 0 e Configurar também. Então a variável MouseX é igual ao valor da posição X do mouse. Depois disso, a variável Pausa muda para 1, de modo que a Variável MouseX não possa ser alterada. Depois, se o mouse fizer qque movimento, que deveria ser < que -10 ou maior que +10, a variável Configurar é alterada para 1. O Script a seguir faz a alternancia entre tela cheia ou não. Inicialmente eu configurei para que a variável fosse comparada apenas com um valor diferente da posição do mouse, mas mesmo com o mouse paradinho, a tela aparece cheia e logo em seguida volta à tela normal. Então imaginei que esse lance de +10 e -10 foosse criar um valor de tolerância, mas continua o problema, a tela fica cheia e em alguns segundos volta ao normal.

//---Begin Script Builder: Alternar entre Tela Normal e Tela Cheia ---//
if (ReadGlobalVar('TelaCheia') = 1) and (ReadGlobalVar('Configurar') = 1) then
begin
SetFullscreen(false);
end
else if (ReadGlobalVar('TelaCheia') = 1) and (ReadGlobalVar('Configurar') = 0) then
begin
SetFullscreen(true);
end
else if (ReadGlobalVar('TelaCheia') = 0) and (ReadGlobalVar('Configurar') = 1) then
begin
SetFullscreen(false);
end
else if (ReadGlobalVar('TelaCheia') = 0) and (ReadGlobalVar('Configurar') = 0) then
begin
SetFullscreen(false);
end;
//---End Script Builder---//


A ideia é criar depois um botão que fizesse a variável configurar voltar a 0 após um clique, o que faria a tela ficar cheia de novo, mas não está funcionando, por que??? Confused A tela enche e esvazia com o mouse parado! Pior que eu acho que ninguém ainda testou essas funções...
Testei também ao invéz de criar uma estrutura condicional no 1º script, desmembrar em 2 separados, sem usar o "else", não dá erro, mas o defeito persiste...

Abraço...




_________________
Lemos
http://alemdanimacao.zip.net/
Sáb Fev 13, 2010 1:55 am Exibir perfil de usuários Enviar mensagem privada Visitar o website do usuário
Edirlei
Administrador
Administrador


Registrado: 15/03/08
Mensagens: 758

Mensagem Responder com citação
Não entendi muito bem, mas é algum problema na sua lógica.

Não sei se era exatamente isso que você queria, mas fiz aqui um script para ele entrar em tela cheia ao iniciar o jogo e sair da tela cheia quando o mouse for movido.

OnCreate do mapa:

Código:
WriteGlobalVar('MouseX', 0);
SetFullscreen(true);


OnLoop do mapa:

Código:
if (ReadGlobalVar('MouseX') <> 0) and (GetWindowMousePositionX <> 0) then
begin
  if ((ReadGlobalVar('MouseX') > GetWindowMousePositionX + 10) or (ReadGlobalVar('MouseX') < GetWindowMousePositionX - 10)) then
  begin
    SetFullscreen(false);
  end;
end;

if (ReadGlobalVar('MouseX') = 0) and (GetWindowMousePositionX <> 0) then
begin                                                       
  WriteGlobalVar('MouseX', GetWindowMousePositionX );
end;


Talvez o problema no seu script seja porque quando o programa é aberto por alguns instantes a posição do mouse é 0 porque a tela ainda não foi carregada, mas o script já esta rodando, assim o seu script sempre iniciava como se o mouse estivesse primeiro na posição 0.


Sáb Fev 13, 2010 5:58 pm Exibir perfil de usuários Enviar mensagem privada Enviar e-mail MSN Messenger
Lemos
Usuário
Usuário


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

Mensagem Responder com citação
Edirlei escreveu:

Talvez o problema no seu script seja porque quando o programa é aberto por alguns instantes a posição do mouse é 0 porque a tela ainda não foi carregada, mas o script já esta rodando, assim o seu script sempre iniciava como se o mouse estivesse primeiro na posição 0.


Obrigado pela ajuda Edirlei, mas defeito continua, mesmo com esse script... Quando inicia, mesmo com o mouse estático, a tela fica cheia e depois de 1 ou 2 segundos, volta ao normal. Mas isso que você falou, sobre o lance de haver diferença entre o tempo de carregamento e a posição real do mouse pode ajudar.
Vou fazer mais uns testes aqui e dou um retorno.

Abraço.



_________________
Lemos
http://alemdanimacao.zip.net/
Sáb Fev 13, 2010 8:05 pm Exibir perfil de usuários Enviar mensagem privada Visitar o website do usuário
Edirlei
Administrador
Administrador


Registrado: 15/03/08
Mensagens: 758

Mensagem Responder com citação
Lemos escreveu:
Obrigado pela ajuda Edirlei, mas defeito continua, mesmo com esse script... Quando inicia, mesmo com o mouse estático, a tela fica cheia e depois de 1 ou 2 segundos, volta ao normal.


Aqui funcionou com o script que eu fiz. Tente aumentar o intervalo da sensibilidade que estava em 10.

Ou então segure o mouse para ele não andar sozinho... Laughing Laughing Laughing
Sáb Fev 13, 2010 8:14 pm Exibir perfil de usuários Enviar mensagem privada Enviar e-mail MSN Messenger
Lemos
Usuário
Usuário


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

Mensagem Responder com citação
Edirlei escreveu:

Aqui funcionou com o script que eu fiz. Tente aumentar o intervalo da sensibilidade que estava em 10.

Ou então segure o mouse para ele não andar sozinho... Laughing Laughing Laughing


É curioso; Confused A configuração de tela cheia ou não depende do controle de 2 variáveis, Configurar e TelaCheia. É preciso que as condições sejam atendidas:

ON CREATE

WriteGlobalVar('MouseX', 0);
WriteGlobalVar('Configurar', 0);
//---Begin Script Builder: Alternar entre Tela Normal e Tela Cheia ---//
if (ReadGlobalVar('TelaCheia') = 1) and (ReadGlobalVar('Configurar') = 1) then
begin
SetFullscreen(false);
end
else if (ReadGlobalVar('TelaCheia') = 1) and (ReadGlobalVar('Configurar') = 0) then
begin
SetFullscreen(true);
end
else if (ReadGlobalVar('TelaCheia') = 0) and (ReadGlobalVar('Configurar') = 1) then
begin
SetFullscreen(false);
end
else if (ReadGlobalVar('TelaCheia') = 0) and (ReadGlobalVar('Configurar') = 0) then
begin
SetFullscreen(false);
end;
//---End Script Builder---//


Aí, no MainLoop eu coloco o seu script e funciona perfeitamente... Confused
Antes estava dando erro porque em vez de colocar na 5ª linha do seu script o comando SetFullscreen(false); (conforme você colocou), eu estava colocando WriteGlobalVar('Configurar', 1); e o script anterior (o meu) também estava no mainloop do mapa...
A idéia era mexer o mouse e alterar a variável Configurar de 0 para 1 e sair da tela cheia.
Agora o script de cima está no oncreate e o seu está no mainloop, funcionou, mas a minha idéia é além de sair da tela cheia aparecer um menu de opções com botões, que vão desde encerrar o programa até voltar à tela cheia. Vou testar aqui ainda, mas a idéia é ao clicar na opção "CONTINUAR", volte à tela cheia e só saia se o mouse mexer, é uma ação que pode se repetir várias vezes, não sei se vai funcionar, uma vez que um script está no oncreate e outro no mainloop.
Conforme for eu te falo. Valeu mesmo, e obrigado mais uma vez! Very Happy

_________________
Lemos
http://alemdanimacao.zip.net/
Sáb Fev 13, 2010 9:38 pm Exibir perfil de usuários Enviar mensagem privada Visitar o website do usuário
Lemos
Usuário
Usuário


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

Mensagem Responder com citação
Bom, em primeiro lugar, valeu pela ajuda Edirlei. Ontem trabalhei até certa hora e a cabeça começou a esquentar e dei um tempo. Hoje, com a mente descansada, retomei o trabalho. Revisei a rotina de funcionamento do programa e lembrei que a tela estar cheia ou não não é o objetivo principal, isso poderia ser configurado por meio de botões, mas o aparecimento ou não desses botões é que são importantes! Resumindo o funcionamento:

1 - a posição do mouse deve ser gravada na variável MouseX e travada.
2 - qualquer mudança no mouse em relação à essa posição deve alterar a variável e provocar o evento (aparecimento de botões - ainda não criado)

3 - ao terminar de mexer nos botões, eles somem e o processo é resetado, de modo que a posição do mouse seja capturada de novo.

Pensei naquele lance que você disse que durante algum tempo da inicialização do mapa, a posição do mouse pode ser confusa, então, como todo o processo normal é controlado por tempo, programei para que as ações só começassem após 5 segundos da iniciação do mapa. Para ver o processo, fiz o label11 exibir a variável pausa que sofre as mudanças durante o processo:

ON CREATE:

WriteGlobalVar('Pausa', 0);
WriteGlobalVar('MouseX', 0);

MAINLOOP

//---Begin Script Builder: Travar a posição do mouse na Variável MouseX após 5 segundos do início do mapa---//
if (ReadGlobalVar('CapFinalSelecionado') = 1) and (ReadGlobalVar('Time') < 245) and (ReadGlobalVar('Pausa') = 0) then
begin
WriteGlobalVar('MouseX', GetWindowMousePositionX );
WriteGlobalVar('Pausa', 1);
end
else if (ReadGlobalVar('CapFinalSelecionado') = 2) and (ReadGlobalVar('Time') < 45) and (ReadGlobalVar('Pausa') = 0) then
begin
WriteGlobalVar('MouseX', GetWindowMousePositionX );
WriteGlobalVar('Pausa', 1);
end;
//---End Script Builder---//
//---Begin Script Builder: Alterar a variável Pausa em função dos movimentos do mouse---//

if (ReadGlobalVar('CapFinalSelecionado') = 1) and (ReadGlobalVar('Time') < 245) and (ReadGlobalVar('Pausa') = 1) and ((GetWindowMousePositionX > ReadGlobalVar('MouseX') + 10) or (GetWindowMousePositionX < ReadGlobalVar('MouseX') - 10)) then
begin
WriteGlobalVar('Pausa', 2);
end
else if (ReadGlobalVar('CapFinalSelecionado') = 2) and (ReadGlobalVar('Time') < 45) and (ReadGlobalVar('Pausa') = 1) and ((GetWindowMousePositionX > ReadGlobalVar('MouseX') + 10) or (GetWindowMousePositionX < ReadGlobalVar('MouseX') - 10)) then
begin
WriteGlobalVar('Pausa', 2);
end;
//---End Script Builder---//
SetLabelText('Label11', IntToStr(ReadGlobalVar('Pausa')));

Quando o mapa inicia, o label11 está em 0. Após 5 segundos ele muda para 1 e fica lá indefinidamente, até que o mouse seja movido; aí a variável muda para 2 e fica assim. Aí, criei um botão que faz a variável mudar para 0 e como o tempo já está abaixo do permitido, a posição do mouse é travada e a variável muda para 1, só mudando novamente para 2 se o mouse se mexer.
Bom, tudo está funcionando bem!

Abraço!

_________________
Lemos
http://alemdanimacao.zip.net/
Dom Fev 14, 2010 2:20 pm Exibir perfil de usuários Enviar mensagem privada Visitar o website do usuário
Mostrar os tópicos anteriores:    
Responder tópico    3D Game Builder - Índice » Programação Todos os horários são GMT
Página 1 de 1

 
Ir para: 
Você não pode enviar mensagens novas neste fórum
Você não pode responder mensagens neste fórum
você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode votar em enquetes neste fórum


Powered by phpBB © 2001, 2008 phpBB Group
Design by Edirlei
Traduzido por phpBB Brasil