Comunidad de diseño web y desarrollo en internet online

duda acerca de onKeyDown, onKeyPress, teclado

Citar            
MensajeEscrito el 12 Jul 2009 07:06 pm
necesito que alguien me ayude con unos codigos. Me he topado con un conflicto que espero sea el ultimo para terminar este proyecto. Es un interactivo que se juega con teclado y cada tecla (obviamente no todo el teclado) tiene un audio particular. *No puse todo el codigo para no llenar de mucho texto*. Esto es:
var sonido1:Sound = new Sound();
var pausa:Object = new Object ();
sonido1.attachSound("R10");
pausa.onKeyDown = function () {
if (Key.isDown (83)) {
//PLAY DE AUDIO CARGADO
sonido2.stop ("R26") ;
sonido1.start();
}
Consegui que al pulsar una tecla, ésta haga un sonido, y al presionar la siguiente tecla, se anula el sonido de la anterior para permitir escuchar la siguiente y asi sucesivamente. Mi problema es que si mantienes presionada la tecla se empieza a repetir una y otra y otra vez y se empalma el audio.
Alguien me dijo que el problema estaba en "onKeyDown", que lo cambiara por "onKeyPress" solo que al ponerlo no se pone azul el codigo (como aparece el "onKeyDown"), como si no existiera. Y con ello tambien me cuestione si hay que cambiar "if (Key.isDown)" por "if (Key.isPress)" pero sucede lo mismo, como si no existiera, y si intento poner,
on (keyPress "<>") resulta que solo puedo poner "Left" "right" etc, pero yo no quiero usar esas teclas. En resumen solo quiero que, aunque mantengas la tecla presionada, el audio de la tecla suene solo una vez. Disculpen si se alargo el texto pero se lo dificil que es comunicar estos probelmas por aqui. Y por desgracia no se mucho de flash. Gracias y animo!

Por pelon pelacas

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2009 09:59 pm
Hola,
puedes usar una variable boolean auxiliar para saber si acabamos de pulsar la tecla, o si es que ya la hemos pulsado y la hemos dejado apretada. Aquí te pongo un ejemplo usando la tecla z:

Código ActionScript :

var zPressed:Boolean;
this.onEnterFrame = function():Void
{
   if(Key.isDown(90)) //tecla Z
   {
      if (zPressed == false)
      {
         trace("tecla z pulsada");
      }
      zPressed = true;
   }
   else
   {
      zPressed = false;
   }
}

Para que veas la diferencia, prueba el siguiente código sin usar la variable auxiliar:

Código ActionScript :

this.onEnterFrame = function():Void
{
   if(Key.isDown(90)) //tecla Z
   {
      trace("tecla z pulsada");
   }
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Jul 2009 12:54 am
muchas gracias, el primer codigo me sirvio, ya que si dejo pulsada la tecla suena solamente una vez.
pero me hizo entrar en otro detalle, porfavor dime si hice bien en poner esa variable para cada una de las teclas. hice esto basandome en tu codigo, solamente cambie de "z" a la letra "a" y agregue "sonido1.start();" para que comenzara el audio:
var aPressed:Boolean;
this.onEnterFrame = function():Void
{
if(Key.isDown(65)) //tecla Z
{
if (aPressed == false)
{
trace("tecla a pulsada");
sonido1.start();
}
aPressed = true;
}
else
{
aPressed = false;
}

}

Nada más que supuse que tenia que creear la misma para todas las teclas entonces copie el codigo y le cambiaba la letra "a" por "s" y asi sucesivamente, reemplazando también el "sonido1.start" por el sonido2.start, etc etc.
La cosa es que solo la ultima tecla que pongo en el codigo, en este caso la "f" es la que suena, las demas ya no se oyen :S. Que estoy haciendo mal? Saludos

Por pelon pelacas

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jul 2009 01:15 am
no se como pero ya resolvi el problema... creo que era por poner this.onEnterFrame = function():Void para cada tecla,
var aPressed:Boolean;
this.onEnterFrame = function():Void ...(y lo demas que me pasaste)
var sPressed:Boolean;
this.onEnterFrame = function():Void ... y lo demas que me pasaste.
creo ahi estaba el error
lo que hice fue: del codigo que te mencione antes (this.onEnterFrame...)que copie para cada tecla, lo elimine en las demas teclas, y deje los "if (key.isDown)" de todas las teclas con audio dentro de los { } de this.onEnterFrame = function():Void. No se si me epxlique, osea de todos esos mismos codigos deje solo uno y dentro de sus corchetes puse todos los key.isDown. Me doy por bien servido. Espero no tener que volver a recurrir a ayuda pero me has salvado le vida hermano!

De antemano muchisimas gracias, es la primera vez en mi vida que me uno y pido ayuda a un foro, ahora se que son muy utiles gracias a gente como tu que hecha la mano. Saludos norteños jajaja Animo!

Por pelon pelacas

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jul 2009 10:11 am
De nada, y sí, sólo deberías poner un onEnterFrame.
De hecho, si tienes todo tu código en un fotograma, sería bueno que sólo tuvieses un onEnterFrame, y que en él estuviesen todas las acciones a realizar al pasar por ese fotograma. Si por el contrario tienes código en varios clips, también te aconsejo lo mismo, poner un único this.onEnterFrame por cada clip que lo necesite.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.