Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael Barros

Combinações de Teclas !

Recommended Posts

class - KeyDetection!

 

/** @author Michael Avila* @version 2.0 by rafael barros*/class KeyDetection{	private var keys_pressed : Array;	private var key_combinations : Array;	private var listeners : Array;	/* Construtor da classe - estado inicial */	public function KeyDetection ()	{		keys_pressed = new Array ();		key_combinations = new Array ();		listeners = new Array ();		// allow this object to listen for events from the key object		Key.addListener (this);	}	public function addListener (listener : Object) : Void	{		for (var i : Number = 0; i < listeners.length; i ++)		{			if (listeners [i] == listener) return;		}		listeners.push (listener);	}	public function removeListener (listener : Object) : Void	{		for (var i : Number = 0; i < listeners.length; i ++)		{			if (listeners [i] == listener) listeners.splice (i, 1);		}	}	public function addCombination (name : String, keyCode1 : Number, keyCode2 : Number) : Void	{		key_combinations.push (arguments);	}	private function invokeOnKeyCombination (combo_name : String ) : Void	{		for (var i : Number = 0; i < listeners.length; i ++)		{			listeners [i].onKeyCombination (combo_name);		}	}	private function onKeyDown ()	{		var key : Number = Key.getCode ();		cleanKeysPressed ();		if (key != keys_pressed [keys_pressed.length - 1])		{			keys_pressed.push (key);		}		checkCombinations ();	}	private function checkCombinations ()	{		for (var j : Number = 0; j < key_combinations.length; j ++)		{			for (var i : Number = 0; i < keys_pressed.length; i ++)			{				if (keys_pressed [i] == key_combinations [j][i + 1])				{					if (i == key_combinations [j].length - 2)					{						invokeOnKeyCombination (key_combinations [j][0]);						return;					}				} else				{					break;				}			}		}	}	private function cleanKeysPressed ()	{		for (var i : Number = 0; i < keys_pressed.length; i ++)		{			if ( ! Key.isDown (keys_pressed [i]))			{				keys_pressed.splice (i, (keys_pressed.length - i));			}		}	}}

 

Modos de usar

var combo_kd:KeyDetection = new KeyDetection();combo_kd.addCombination("shift_s", Key.SHIFT, 83);var listener_obj:Object = new Object();listener_obj.onKeyCombination = function(name:String){	trace("Combinação ok!");}combo_kd.addListener(listener_obj);

var combo_kd:KeyDetection = new KeyDetection();combo_kd.addCombination("shift_s", Key.SHIFT, 83);//added combocombo_kd.addCombination("shift_z", Key.SHIFT, 90);var listener_obj:Object = new Object();listener_obj.onKeyCombination = function(name:String){	switch (name)	{		case "shift_s":			 trace("Shift S combinação detectada!");			 break;		 case "shift_z":			  trace("Shift Z combinação detectada!");			  break;	  }}combo_kd.addListener(listener_obj);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe, que é boa, é. Mas ela dá umas enroladas...

 

Saca só essa. Bem mais compacta, né não?

 

Ah, está em AS1.0, mas passar pra 2.0 é fácil.

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm maravilha essa que você postou...Mas passei ela para minha coleção de classes e to mudando algumas coisas...Fazendo uma função unica, para double click, key combinations e outros...Matar de uma veiz os controles do usuario...Bom é isso.. assim q eu acabar coloco aqui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos,

gostaria muito utilizar cominaçoes de teclas, mas estou com dificuldade com esses scripts.

 

é para usar em action script 1.0 & 2.0 ?

 

só colocar no primeiro frame?

 

desculpe a ignorância, mas sou iniciante em AS 2.0

 

p.s. quando uso o script aparece a mensagem de erro:

" 1120: Access of undefined property Key. / Key.addListener (Key); "

" 1120: Access of undefined property Key. / Key.pressed = []; "

" 1120: Access of undefined property Key. / Key.onKeyDown = function () "

...

 

Obrigado.

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.