Comunidad de diseño web y desarrollo en internet online

Problemas con Stop(); de un MovieClip

Citar            
MensajeEscrito el 03 Feb 2012 09:02 pm
Holas Foreros como les va?....estube trabajando en una prueba de mover un movieclip con Fotogramas que lo hacen caminar en animación...todo importado con AS3...bien mi problema es el siguiente: Ya he logrado hacerlo mover y que en cada direccion que mi MC se mueve, este va al fotograma que le corresponde a su animación....pero el problema esque no se para, se sigue animando, le he puesto un stop(); pero nada.....El debe pararse con un Key Release y segun su posicion que quede por ejemplo en X - este debe quedar en esa posicion e ir a un fotograma y pararse ahi....pero no logró hacerlo, aqui les dejo el codigo del MC, porfavor si es posible que me ayuden :(

Código ActionScript :

package com.esedeerre
{
  import flash.display.MovieClip;
  import flash.display.Stage;
  import flash.events.Event;
  import flash.events.KeyboardEvent;
  import flash.ui.Keyboard;
  import com.senocular.utils.KeyObject;


    public class Ship extends MovieClip
   { 
   
       private var stageRef:Stage;
      private var key:KeyObject;
   
   
      
      
      private   var velocidad      :uint       = 4; 
      private var parada         :Boolean   = true;
      
      
      
      public function Ship(stageRef:Stage) 
   {
      stop();
      this.stageRef = stageRef;
      key = new KeyObject(stageRef);


     
     
     addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
     
     

    }
   
   private function Release (e:Event):void
   {
      
      if (key.keyReleased(Keyboard.LEFT))
      {
      (currentLabel != "link_down")
      gotoAndStop("parado_down");
      
      }
   
   else if (key.keyReleased(Keyboard.RIGHT))
      {
      (currentLabel != "link_right")
      gotoAndStop("parado_right");
      
      }
      
      if (key.keyReleased(Keyboard.UP))
      {
      (currentLabel != "link_up")
      gotoAndStop("parado_up");
      
      }
      
      else if (key.keyReleased(Keyboard.DOWN))
      {
      (currentLabel != "link_down")
      gotoAndStop("parado_down");
      
      
      
      }
   }
   
   

    private function loop(e:Event) : void 
   {
            
      if (key.isDown(Keyboard.LEFT))
      {
            x -= velocidad;
            (currentLabel != "link_left")
            gotoAndPlay("link_left");
            stop();
            
      }
            
            
            
         else if(key.isDown(Keyboard.RIGHT))
         {
         x += velocidad;
         (currentLabel != "link_right")
         gotoAndPlay("link_right");
         stop();
         
         }
            
         
 
         
         if (key.isDown(Keyboard.UP))
         {
         y -= velocidad;
         (currentLabel != "link_up")
         gotoAndPlay("link_up");   
         stop();
         
         }
         
         
         else if (key.isDown(Keyboard.DOWN))
         {
         y += velocidad;
         (currentLabel != "link_down")
         gotoAndPlay("link_down");
         stop();
         
         }
         
   }
   }
}

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Feb 2012 06:29 am
Sera muy amable que alguien me diga como se hace? porfavor?

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2012 11:10 pm
Alguien seria muy amable de ayudarme?...Porfavorr !!

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Feb 2012 07:10 am
Me explico mejor....Cuando no hay teclas presionada, quiero que mi animaciñon se detenga !

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Feb 2012 02:56 am
GRACIAS POR LA AYUDA !!!

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Feb 2012 08:05 am
sabes que en Event.ENTER_FRAME entra continuamente por cada avance del los frames...y como KeyObject siempre tiene valor...pues siempre te esta haciendo moviento aunque no hayas pulsado tecla. Puedes crear una variable que te indique que has echo la pulsacion de la tecla y asi evitar que vuelva a entrar.

Código ActionScript :

var Pulsacion: Boolean= false;

private function loop(e:Event) : void 
{
  if (Pulsacion)
  {
    //haces lo que tienes que hacer con la pulsacion
    
    Pulsacion= false;
  }
}

pero como estas utilizando el KeyObject pues no podras capturar la tecla directamente desde esa clase (no lo se con seguridad) o puedes enfocarlo de otra forma

por ejemplo

Código ActionScript :

package
{
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.events.KeyboardEvent;
   import flash.ui.Keyboard;
  
   public class Ship extends MovieClip
   {
      //variable para el avance del clip en las distintas direcciones;
      private var velocidad:uint = 4;
      //variable para contar las pulsaciones que has echo en clip
      private var pulsaciones= 0;
      //variable para ver la orientacion de la tecla...izquierda y arriba es negativo...derecha y abajo es positivo
      private var orientacion= 0;
      //variable para guardar la anterior tecla pulsada
      private var Tecla: uint= 0;
      //variable para etiqueta de animacion
      private var Etiqueta: String= "";
         
      public function Ship ()
      {
         //este evento solo se activa cuando el clip esta en el stage
         this.addEventListener(Event.ADDED_TO_STAGE, Escenario);
      }
      
      private function Escenario (e: Event): void
      {
         //ya no nos sirve el evento y lo removemos 
         this.removeEventListener(Event.ADDED_TO_STAGE, Escenario);
         //Evento para ver que tecla se ha pulsado en el stage
         this.stage.addEventListener(KeyboardEvent.KEY_DOWN, TeclaPulsada);
         //Evento para entrar por cada frames
         this.addEventListener(Event.ENTER_FRAME, Animacion);
      }
      
      private function TeclaPulsada (e: KeyboardEvent): void
      {
         orientacion= 0;
         //si cambia la pulsacion de la tecla 
         if (Tecla!= e.keyCode) pulsaciones=0;
         switch (e.keyCode)
         {
            case Keyboard.LEFT:
               orientacion=-1;
               pulsaciones+=1;
               Etiqueta= "link_left";
               break;
            case Keyboard.RIGHT:
               orientacion=+1;
               pulsaciones+=1;
               Etiqueta= "link_right";
               break;
            case Keyboard.UP:
               orientacion=-1;
               pulsaciones+=1;
               Etiqueta= "link_up";
               break;
            case Keyboard.DOWN:
               orientacion=+1;
               pulsaciones+=1;
               Etiqueta= "link_down";
               break;
         }
         //guardamos la tecla pulsada para comprobar con la siguiente tecla pulsada
         Tecla= e.keyCode;
      }
      
      private function Animacion (e: Event): void
      {
         //solo entramos si tenemos alguna tecla pulsada
         if (pulsaciones>0)
         {
            pulsaciones-=1;
            //como no hacias mas que gotoAndPlay(...); stop(); se puede haceresto
            gotoAndStop(Etiqueta);
            //movemos el clip dependiendo de la etiqueta que tenemos
            if (Etiqueta=="link_left" || Etiqueta=="link_right") this.x+=velocidad*orientacion;
            if (Etiqueta=="link_up" || Etiqueta=="link_down") this.y+=velocidad*orientacion;
            //comprobamos que el clip no ha salido del stage y si es asi le ajustamos la posicion
            if (this.x<0) this.x= 0;
            if (this.y<0) this.y= 0;
            if (this.x>this.stage.stageWidth- this.width) this.x= this.stage.stageWidth- this.width;
            if (this.y>this.stage.stageHeight- this.height) this.y= this.stage.stageHeight- this.height;
         }
      }
   }
}


espero que te sirva de ayuda y te haya aclarqado tus dudas

saludos

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Feb 2012 03:36 am
Muchas gracias Yonomimi...me haz ayudado pero aun no se para....como hago para detenerlo?? la animacion me refiero...cuando suelto la tecla se sigue animando...incluso al principio..al probar la pelicula sin pulsar una tecla !!!

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Feb 2012 04:25 am
supongo que tienes la animacion estructurado asi:

frame 0: en le codigo pon "stop();"
frame 1: etiqueta left
frame 2:
frame 3: en le codigo pon "stop();"
frame 4 etiqueta right
frame 5:
frame 6: en le codigo pon "stop();"
frame 7: etiqueta up
frame 8:
frame 9: en le codigo pon "stop();"
frame 10:etiqueta down
frame 11:
frame 12: en le codigo pon "stop();"

y que linea de tiempo de la animacion lo tienes metido en un simbolo y que dicho simbolo llama a la clase "Ship"

me tienes que decir como tienes la linea de tiempo y como tienes el codigo para que te pueda ayudar

saludos

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Feb 2012 04:34 am
Porq no mejor me pasas tu correo por inbox y te paso el proyecto ?? asi podrás ver todo !

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Feb 2012 04:59 am
Te he enviado un mp

Por cobeli

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Feb 2012 08:44 am
asi es como te lo he dejao

Código ActionScript :

package com.esedeerre
{
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.events.Event;
   import flash.events.KeyboardEvent;
   import flash.ui.Keyboard;
   import com.senocular.utils.KeyObject;

   public class Ship extends MovieClip
   {

      private var stageRef:Stage;
      private var key:KeyObject;
      private var velocidad:uint = 6;
      private var parada:Boolean = true;

      //variable para contar las pulsaciones que has echo en clip
      private var pulsaciones = 0;
      //variable para ver la orientacion de la tecla...izquierda y arriba es negativo...derecha y abajo es positivo
      private var orientacion = 0;
      //variable para guardar la anterior tecla pulsada
      private var Tecla:uint = 0;
      //variable para etiqueta de animacion
      private var Etiqueta:String = "";

      private var Izquierda:link_left;
      private var Derecha:link_right;
      private var Arriba:link_up;
      private var Abajo:link_down;

      public function Ship(stageRef:Stage)
      {
         //este evento solo se activa cuando el clip esta en el stage
         this.addEventListener(Event.ADDED_TO_STAGE,Escenario);

         Izquierda = new link_left  ;
         Izquierda.visible = false;
         addChild(Izquierda);
         Derecha = new link_right  ;
         Derecha.visible = false;
         addChild(Derecha);
         Arriba = new link_up  ;
         Arriba.visible = false;
         addChild(Arriba);
         Abajo = new link_down  ;
         addChild(Abajo);
         Etiqueta = "Abajo";

         this.stageRef = stageRef;
         key = new KeyObject(stageRef);

      }

      private function Escenario(e:Event):void
      {
         //ya no nos sirve el evento y lo removemos 
         this.removeEventListener(Event.ADDED_TO_STAGE,Escenario);
         //Evento para ver que tecla se ha pulsado en el stage
         this.stage.addEventListener(KeyboardEvent.KEY_DOWN,TeclaPulsada);
         //Evento para entrar por cada frames
         this.addEventListener(Event.ENTER_FRAME,Animacion);
      }

      private function TeclaPulsada(e:KeyboardEvent):void
      {
         orientacion = 0;
         if (this[Etiqueta]) this[Etiqueta].visible = false;
         //si cambia la pulsacion de la tecla 
         if (Tecla != e.keyCode)
         {
            pulsaciones = 1;
         }
         switch (e.keyCode)
         {
            case Keyboard.LEFT :
               orientacion = -1;
               pulsaciones +=  1;
               Etiqueta = "Izquierda";
               break;
            case Keyboard.RIGHT :
               orientacion = +1;
               pulsaciones +=  1;
               Etiqueta = "Derecha";
               break;
            case Keyboard.UP :
               orientacion = -1;
               pulsaciones +=  1;
               Etiqueta = "Arriba";
               break;
            case Keyboard.DOWN :
               orientacion = +1;
               pulsaciones +=  1;
               Etiqueta = "Abajo";
               break;
         }

         if (this[Etiqueta]) this[Etiqueta].visible = true;
         //guardamos la tecla pulsada para comprobar con la siguiente tecla pulsada
         Tecla = e.keyCode;
      }

      private function Animacion(e:Event):void
      {
         //solo entramos si tenemos alguna tecla pulsada
         if (pulsaciones > 0)
         {
            pulsaciones -=  1;

            this[Etiqueta].play();
            //movemos el clip dependiendo de la etiqueta que tenemos
            if (Etiqueta == "Izquierda" || Etiqueta == "Derecha")
            {
               this.x +=  velocidad * orientacion;
            }
            if (Etiqueta == "Arriba" || Etiqueta == "Abajo")
            {
               this.y +=  velocidad * orientacion;
            }//comprobamos que el clip no ha salido del stage y si es asi le ajustamos la posicion
            if (this.x < 0)
            {
               this.x = 0;
            }
            if (this.y < 0)
            {
               this.y = 0;
            }
            if (this.x > this.stage.stageWidth - this.width)
            {
               this.x = this.stage.stageWidth - this.width;
            }
            if (this.y > this.stage.stageHeight - this.height)
            {
               this.y = this.stage.stageHeight - this.height;
            }
         }
      }
   }
}

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Feb 2012 09:11 am
Muchass Graciass....Por fin podré avanzar :D....y entiendo el codigo, lo estructurastes muy bien, vaya...Ya sabes si necesitas una mano para lo que sea de Diseño me envias un MP....Que soy Diseñador Grafico ;)

Por cobeli

13 de clabLevel



 

firefox

 

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