Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Grubert

Problema com onKeyDown

Recommended Posts

Olá pessoal, tudo certo?

 

Seguinte, estou desenvolvendo um projeto, onde o usuário tem uma série de vídeos, e uma tela default.

 

A principio, quando ele clica alguma tecla qualquer (Precisa ser uma tecla qualquer, pois ligamos um sensor de movimento no teclado), a tela de default carrega um vídeo aleatório, que é tocado, e ao final volta para a tela default.

 

Até ai tudo bem, o código para isso é este aqui:

 

var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
	trace ("tecla");
    gotoAndPlay ("default", 1);
};
Key.addListener(keyListener);

Cada vídeo está em uma cena diferente, e a página default também.

 

O problema é que, o sensor é sensível, então quando alguém passa na frente, ao invés de apertar apenas uma tecla, ele aperta várias, e isso faz com que os vídeos fiquem pulando, pois coloquei esse código no primeiro KeyFrame de cada cena, pois a intenção é com que o usuário assista um pouco, e assim que outro passar, interrompa o vídeo que o primeiro estava vendo.

 

Mas o problema é que preciso colocar um delay, um intervalo para essas teclas funcionarem, de pelo menos 5 segundos entre cada clique.

 

Tentei utilizar setTimeOut mas não deu muito certo, e também criei uma variavel Trava=true, que começa como true, e depois que o primeiro clique é ativado, ela fica false e desativa a função do botão, com um cleanTimeOut de 5s, mas também não deu muito certo.

 

O problema é que essas soluções até poderiam dar certo se eu conseguisse programar certinho, mas estou com muita dificuldade pessoal.

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque um if

if (Key.getCode() != null) {
 //código
}

 

Exemplo de key

//Crio o campo de texto para mostrar a tecla precionada
var campo:TextField = this.createTextField('campo', this.getNextHighestDepth(), Stage.width/2 - 125, Stage.height/2, 250, 50);

//Crio o objeto que vai dizer qual tecla foi pressionada
var keyListener:Object = new Object();
//Crio a função que mostra quando a tecla foi pressionada
keyListener.onKeyDown = function() {
	campo.text = "DOWN -> Código: "+Key.getCode()+"\tASCII: "+Key.getAscii()+"\tKey: "+chr(Key.getAscii());
};
//Crio a função de quando a tecla foi solta
keyListener.onKeyUp = function() {
	campo.text = "UP -> Código: "+Key.getCode()+"\tASCII: "+Key.getAscii()+"\tKey: "+chr(Key.getAscii());
};
Key.addListener(keyListener);

Ou seja se você der um if

//Crio o objeto que vai dizer qual tecla foi pressionada
var keyListener:Object = new Object();
//Crio a função que mostra quando a tecla foi pressionada e verifico se existe a tecla
keyListener.onKeyDown = function() {
	if(Key.getCode() != null){
 	gotoAndPlay('default', 1);
};
Key.addListener(keyListener);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pelo toque Berserck.

 

Mas com esse código eu consigo criar um intervalo de tempo de uma tecla para outra?

 

Farei o teste e digo o que acontece.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não

 

Ao você colocar um listener em uma tecla não tem como colocar um intervalo

 

A não ser que você remova o listener quando clicar... coloque um intervalo para re colocar o listener

Ai sim vai funcionar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ficaria tipo assim?

 

var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
    Key.removeListener(keyListener);
    setinterval(keyListener, 5000);
    gotoAndPlay ("default", 1);
};

Key.addListener(keyListener);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim seria o correto:

var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
	Key.removeListener(keyListener);
	setInterval(interval, 5000);	
	gotoAndPlay ("default", 1);
};

Key.addListener(keyListener);

function interval(){
	Key.addListener(keyListener);
}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim seria o correto:

var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
	Key.removeListener(keyListener);
	setInterval(interval, 5000);	
	gotoAndPlay ("default", 1);
};

Key.addListener(keyListener);

function interval(){
	Key.addListener(keyListener);
}

Abraços

 

 

Cara.

 

Impossivel, está certinho, do jeito que eu preciso, mas não sei o que estou colocando errado que essa parada não funciona. http://forum.imasters.com.br/public/style_emoticons/default/no.gif

 

Já vi que seu Messenger não é Help-Desk, mas será que poderia me ajudar?

 

Acho que só vendo o meu .fla tudo facilitaria.

 

Isto é, se estiver com um tempinho não é.

 

http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

 

Tentei o seu código.

 

Este aqui:

 

var keyListener:Object = new Object();
setinterval (restart, 5000);

function restart()
{
     keyListener.onKeyDown = function()
{
    gotoAndPlay ("default", 1);
    clearInterval(1);
}}

E muitos outros, mas não tem jeito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas afinal o que você quer fazer????

 

Que até agora eu não entendi?

Pois pelo que entendi você queria travar por 5 segundos e isso meu código já faz... ele simplesmente ignora o teclado por 5 segundos... depois libera o teclado novamente.

 

 

O problema provavelmente é que está em cenas diferentes

Então para você controlar isso você deveria usar uma classe ou funções globais que sirvam para todas as cenas... assim resolveria seu problema.

 

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.