Comunidad de diseño web y desarrollo en internet online

Problema con keydown y la ejecucion de mc

Citar            
MensajeEscrito el 24 May 2013 12:03 pm
Hola a todos!
tengo un problema, seguramente muy sencillo para todos ustedes pero no para mi nivel muy amateur de actionsctript.
Tengo el sig. codigo:

Código ActionScript :

onEnterFrame=function () {
      
      
      if (Key.isDown(Key.UP)&&Key.isDown(Key.DOWN)){Tecla="UD", trace("Up down")} 
      if(Key.isDown(Key.UP)&&!Key.isDown(Key.DOWN)){Tecla="U"}
      if (Key.isDown(Key.DOWN)&&!Key.isDown(Key.UP)){ Tecla="D"}
      
      
      Key.isDown(Key.DOWN)||Key.isDown(Key.UP)||Key.isDown(87)||Key.isDown(81)?pressed=true:pressed=false
      
      pressed==false?Tecla="STAND":nada
       
       Tecla=="STAND"?mc.gotoAndStop(1):nada
       Tecla=="D"?Pbutton3():nada
       Tecla=="UD"?Pbutton1():nada
       Tecla=="U"?Pbutton2():nada
       
}

function Pbutton1(){
   
   mc.gotoAndStop(4)
}
function Pbutton2(){
   mc.gotoAndStop(2)
}
function Pbutton3(){
   mc.gotoAndStop(3)
}

function Pbutton4(){
   mc.gotoAndStop(1)
}

adentro de cada frame (1,2,3,4) del mc tengo otro mc con una animacion..

El tema es que cuando apreto las teclas que he puesto me interrumpe la animacion y me empieza la otra,
lo que yo quiciera hacer es que "primero" ejecute toda la animacion y cuando termine pase al otro evento. Esto me sirve porque estoy tratando de hacer un juego con mi hijo y pasa que cuando cuando apreto ciertos botones donde la animacion de "piña" es un poco mas larga, me hace un efecto feo y me quedan las animaciones por la mitad y quiciera que esto no pase.

Gracias

Por w0lfman

5 de clabLevel



 

2003

firefox
Citar            
MensajeEscrito el 24 May 2013 12:32 pm
Puedes poner algun tipo de flag, por ejemplo

animando = true

Y que desde el final de cada animación que lo suelten

_parent.animando = false

Luego si incluyes esta variable en tu cadena de if, chequeas que este en false antes de mandar a ejecutar cualqueir animación

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 24 May 2013 04:04 pm
Gracias Jorge, era una question logica al final :)
Despues nececitaba algo como que si dejo apretada la tecla (en los botones de pegar) que no me repita la animacion asique le cree una especie de timer.. y funciona todo.. posteo el codigo, seguramente hay una mejor manera de hacer todo esto pero bueh.. "es lo que hay" por ahora..
pd: provè usando un KeyListener envez del enterframe pero me anda muy mal, me hace algunos conflictos

Código ActionScript :

animando=false
tt=0
onEnterFrame=function () {
      
      
      // botones
      if (Key.isDown(81)&&Key.isDown(87)&&animando==false&&tt==0){Tecla="QW", tt++, animando=true} 
      else if (Key.isDown(81)&&!Key.isDown(87)&&animando==false&&tt==0){Tecla="Q",animando=true,tt++}
      else if (Key.isDown(87)&&!Key.isDown(81)&&animando==false&&tt==0){ Tecla="W",animando=true,tt++}
      
      
      //direccionales (donde nececito que cambie animacion cuando toco las otras teclas)
      if (Key.isDown(Key.UP)&&Key.isDown(Key.RIGHT)){Tecla="UR", tt++, animando=true} 
      else if (Key.isDown(Key.UP)&&!Key.isDown(Key.RIGHT)){Tecla="U", tt++, animando=true} 
       else if (!Key.isDown(Key.UP)&&Key.isDown(Key.RIGHT)){Tecla="R", tt++, animando=true} 
   

      
      Key.isDown(Key.DOWN)||Key.isDown(Key.UP)||Key.isDown(87)||Key.isDown(81) && animando==false?pressed=true:(pressed=false, tt=0)
      
      
      animando==false?(Tecla="STAND"):nada
       
       Tecla=="STAND"?mc.gotoAndStop(1):nada
       Tecla=="Q"?Pbutton1():nada
       Tecla=="QW"?Pbutton3():nada
       Tecla=="W"?Pbutton2():nada
       Tecla=="U"?Pbutton1():nada
       Tecla=="UR"?Pbutton3():nada
       Tecla=="R"?Pbutton2():nada
       
}

function Pbutton1(){
   animando==true?mc.gotoAndStop(4):nada
}
function Pbutton2(){
   animando==true?mc.gotoAndStop(2):nada
}
function Pbutton3(){
   animando==true?mc.gotoAndStop(3):nada
   
}



ah.. otra cosa.. en el ultimo frame de cada animacion tengo un _root.animando=false
como puedo hacer para evitar de escrivirlo en cada animacion y ponerlo directamente en el keyframe principal? .. sin usar el nombre de la animacion..
ej. si estoy posicionado en el frame 4 de mc, evaluar si estoy en el ultimo frame de la animacion que esta abajo y cambiar mi variable _root.animando=false

se puede?

Por w0lfman

5 de clabLevel



 

2003

firefox
Citar            
MensajeEscrito el 24 May 2013 06:29 pm
"la animación que esta abajo" la accedes por nombre de instancia, asi que tienes que usarlo. Hay formas mucho mas eficientes de hacer esto mismo, pero me parece que lo mejor es que vayas haciendo tu propio camino. Igual ten en cuenta que solo existe un Key.isDown por vez, es decir usar dos Key.isDown con AND no tiene sentido

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 27 May 2013 03:54 pm
gracias Jorge,
ya que estoy aprovecho para hacer otra pregunta que siempre tiene que ver con el keyisDown..

Quiero hacer lo siguiente:

al apretar las teclas LEFT DOWN RIGHT hacer una accion,
1) no quiero tenerlas que apretar todas juntas,
2) tampoco quiero apretar una, soltarla y luego apretar la otra (como hice en el script que pongo abajo)

me gustaria hacer de modo que al apretarlas en orden ej: LEFT DOWN RIGHT cuando paso de una tecla a la otra pueda dejar apretada (al menos por un tiempo reducido) la tecla anterior.

Código ActionScript :

TiempoTecla = 1;
MaxTiempo = 10
Tbuffer = ""



onEnterFrame = function ()
{
   TiempoTecla++;
   if (TiempoTecla >= MaxTiempo)
   {
      Tbuffer = " ";
   }
   if (Key.isDown(Key.RIGHT) && pressed == false)
   {
      Tbuffer += "R";
      TiempoTecla = 0;
   }
   if (Key.isDown(Key.LEFT) && pressed == false)
   {
      Tbuffer += "L";
      TiempoTecla = 0;
   }
   if (Key.isDown(Key.DOWN) && pressed == false)
   {
      Tbuffer += "D";
      TiempoTecla = 0;
   }
   trace (Tbuffer)
   
   if (Key.isDown(Key.DOWN)or Key.isDown(Key.LEFT) or Key.isDown(Key.RIGHT)){
      pressed=true
   } else pressed=false

};

Por w0lfman

5 de clabLevel



 

2003

firefox
Citar            
MensajeEscrito el 27 May 2013 07:42 pm
Lo que se usan son flagas, digamos que tienes un booleano llamado leftIsPressed, entonces

var leftIsPressed:Boolean = false

Lo mismo para el resto, se ponen en true cuando el Key.IsDown les corresponde, se vuelven a false cuando el listener del Key indica que una tecla ha sido soltada (si existe iun Key.IsUp puede servir, la verdad no lo recuerdo)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 27 May 2013 07:43 pm
Lo que se usan son flagas, digamos que tienes un booleano llamado leftIsPressed, entonces

var leftIsPressed:Boolean = false

Lo mismo para el resto, se ponen en true cuando el Key.IsDown les corresponde, se vuelven a false cuando el listener del Key indica que una tecla ha sido soltada (si existe iun Key.IsUp puede servir, la verdad no lo recuerdo)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 27 May 2013 07:58 pm
si te entiendo pero lo que quiero hacer no es que quede el efecto de "tecla apretada"..
por ejemplo quiero hacer una combinacion de teclas estilo el hadoken del street fighter (left + down + right + punch)
con el codigo que puse antes funciona, solo que si "arrastro un poco" entre una tecla y otra no me lo hace, por eso quiero hacer una especie de "cache" o algo asi que me permita de pasar a la otra tecla tambien cuando dejo apretada la tecla anterior por X tiempo... no se si me explico

Por w0lfman

5 de clabLevel



 

2003

firefox

 

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