Comunidad de diseño web y desarrollo en internet online

Detener un tween desde otra función

Citar            
MensajeEscrito el 12 Mar 2013 11:09 am
Hola, tengo una función en la que creo un tween que anima un objeto de un lado a otro de la pantalla y cuando llega al final aparece un mensaje en pantalla y detiene al otro objeto que hay en pantalla y que es controlado por un botón. Tengo otra función (la del botón) que controla al otro objeto y que cuando llega a una posición x mediante un if hace que aparezca un mensaje y quiero que detenga el tween de la otra función para que la animación no siga. Como lo hago??
Gracias a todos

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 11:25 am
El Tween tiene que ser declarado fuera de la función, y si ambas funciones estan dentro del mismo timeline, entonces puedes hacer algo como


elotrotween.stop()

Si lo declaras dentro de la función es local y la otra función no lo puede ver. El alcance (en inglés scope) de las variables es importante para entender esto

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Mar 2013 11:37 am
Gracias, voy a intentarlo, lo del enterframe ya lo solucione, gracias de nuevo

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 12:05 pm
bueno, pues al sacarlo de la función no se bien donde ponerlo porque me dice no se que de la función constructora...
te paso una parte del código a ver si ves algo...

public function oneracehandler()
{
stage.removeChild(Cuenta);

var carrera:Tween = new Tween(Caracolarriba,"x",Regular.easeIn,610,30,300);

Caracolarriba.addEventListener(Event.ENTER_FRAME,perdedorhandler);

Botonabajo.addEventListener(MouseEvent.MOUSE_DOWN,racedownhandler);

}

public function perdedorhandler (Event)
{
if (Caracolarriba.x == 30)
{
Pierdes = new pierdes();
stage.addChild(Pierdes);
Pierdes.x = 390;
Pierdes.y = 300;
Botonabajo.visible = false;
setTimeout (parar,1);
}

}

public function parar()
{
Caracolarriba.removeEventListener(Event.ENTER_FRAME,perdedorhandler);
}

public function racedownhandler(e:MouseEvent)
{
Caracolabajo.x = Caracolabajo.x + 10;
if (Caracolabajo.x == 710)
{
WIN1 = new ganador1();
stage.addChild(WIN1);
WIN1.x = 280;
WIN1.y = 300;
Botonabajo.visible = false;
}

}

en esta ultima función es la que debería parar el tween para que después de aparecer el "tu ganas" no siga el tween funcionando y que aparezca el "tu pierdes" sobrepuesto.

gracias de nuevo por todo

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 12:17 pm
¿Esto es una clase? Si es así lo declaras como propiedad de clase al principio, donde se declaran todos los miembros de una clase

Código ActionScript :

package{
   public class onerace{
      var carrera:Tween   
   }
}


Luego lo instancias y lo usas en cualquier método de la clase

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Mar 2013 01:12 pm
te mando todo el código porque me estoy liando...
me doy cuenta también que coincide el nombre que le di a la var del tween con el de la clase principal

Código ActionScript :

package  
{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import flash.events.*;
   import flash.utils.*;
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   
   
   public class carrera extends MovieClip 
   {
      public var Titulo:titulo;
      public var Resumen:descripcion;
      public var Botonone:botonone;
      public var Botontwo:botontwo;
      public var Fondo:fondo;
      public var Botonabajo:botonabajo;
      public var Caracolabajo:caracolabajo;
      public var CaracolANI:caracolani;
      public var Caracolarriba:caracolarriba;
      public var Cuenta:cuentatras;
      public var WIN1:ganador1;
      public var Pierdes:pierdes;
      
      public function carrera() 
      {
         Titulo = new titulo();
         stage.addChild(Titulo);
         Titulo.x = 350;
         Titulo.y = 100;
         
         Resumen = new descripcion();
         stage.addChild(Resumen);
         Resumen.x = 400;
         Resumen.y = 150;
         
         Botonone = new botonone();
         stage.addChild(Botonone);
         Botonone.x = 400;
         Botonone.y = 300;
         Botonone.addEventListener(MouseEvent.MOUSE_DOWN,onehandler);
         
         Botontwo = new botontwo();
         stage.addChild(Botontwo);
         Botontwo.x = 415;
         Botontwo.y = 350;
         Botontwo.addEventListener(MouseEvent.MOUSE_DOWN,twohandler);
      }
      
      public function onehandler(e:MouseEvent)
      {
         stage.removeChild(Titulo);
         stage.removeChild(Resumen);
         stage.removeChild(Botonone);
         stage.removeChild(Botontwo);
         
         Cuenta = new cuentatras();
         stage.addChild(Cuenta);
         Cuenta.x = 400;
         Cuenta.y = 220;
         
         Fondo = new fondo();
         stage.addChild(Fondo);
         
         Caracolarriba = new caracolarriba();
         stage.addChild(Caracolarriba);
         Caracolarriba.x = 610;
         Caracolarriba.y = 120;
         
         Caracolabajo = new caracolabajo();
         stage.addChild(Caracolabajo);
         Caracolabajo.x = 120;
         Caracolabajo.y = 330;
         
         Botonabajo = new botonabajo();
         stage.addChild(Botonabajo);
         Botonabajo.x = 30;
         Botonabajo.y = 400;
         
         setTimeout(oneracehandler,3000);
         
      }
      
      public function oneracehandler()
      {
         stage.removeChild(Cuenta);
         
         var carrera:Tween = new Tween(Caracolarriba,"x",Regular.easeIn,610,30,300);
         
         Caracolarriba.addEventListener(Event.ENTER_FRAME,perdedorhandler);
         
         Botonabajo.addEventListener(MouseEvent.MOUSE_DOWN,racedownhandler);
         
      }
      
      public function perdedorhandler (Event)
      {
         if (Caracolarriba.x == 30)
         {
            Pierdes = new pierdes();
            stage.addChild(Pierdes);
            Pierdes.x = 390;
            Pierdes.y = 300;
            Botonabajo.visible = false;
            setTimeout (parar,1);
         }
         
      }
      
      public function parar()
      {
         Caracolarriba.removeEventListener(Event.ENTER_FRAME,perdedorhandler);
      }
      
      public function racedownhandler(e:MouseEvent)
      {
         Caracolabajo.x = Caracolabajo.x + 10;
         if (Caracolabajo.x == 710)
         {
            WIN1 = new ganador1();
            stage.addChild(WIN1);
            WIN1.x = 280;
            WIN1.y = 300;
            Botonabajo.visible = false;
         }
         
      }
      
      public function twohandler(e:MouseEvent)
      {
         trace ("funciona2");
      }
      
      
   }
   
}


gracias de nuevo por todo

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 01:55 pm
Debajo de la última variable agrega

Código ActionScript :

public var Pierdes:pierdes;
private var carrera:Tween;


Luego cuando lo usas no lo declaras

Código ActionScript :

 public function oneracehandler()
      {
         stage.removeChild(Cuenta)
         carrera = new Tween(Caracolarriba,"x",Regular.easeIn,610,30,300);


Luego desde cualquier otro método de la clase lo puedes acceder, parar, etc

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Mar 2013 06:56 pm
:-(
no me sale, después de poner private var carrera y no declararla luego tal como me decías, en el momento que quiero detenerlo he puesto carrera.stop();
al ejecutar la película me da un error que me dice las funciones de constructor deben ser métodos de instancia, en la linea del private var.
que puede ser?
gracias otra vez por tu tiempo.

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 07:18 pm
Postea la clase entera con los cambios que hiciste

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Mar 2013 08:56 pm
ahí va el código con las correcciones que me dijiste

Código ActionScript :

package  
{
   
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import flash.events.*;
   import flash.utils.*;
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   
   
   public class carrera extends MovieClip 
   {
      public var Titulo:titulo;
      public var Resumen:descripcion;
      public var Botonone:botonone;
      public var Botontwo:botontwo;
      public var Fondo:fondo;
      public var Botonabajo:botonabajo;
      public var Caracolabajo:caracolabajo;
      public var CaracolANI:caracolani;
      public var Caracolarriba:caracolarriba;
      public var Cuenta:cuentatras;
      public var WIN1:ganador1;
      public var Pierdes:pierdes;
      private var carrera:Tween;
      
      public function carrera() 
      {
         Titulo = new titulo();
         stage.addChild(Titulo);
         Titulo.x = 350;
         Titulo.y = 100;
         
         Resumen = new descripcion();
         stage.addChild(Resumen);
         Resumen.x = 400;
         Resumen.y = 150;
         
         Botonone = new botonone();
         stage.addChild(Botonone);
         Botonone.x = 400;
         Botonone.y = 300;
         Botonone.addEventListener(MouseEvent.MOUSE_DOWN,onehandler);
         
         Botontwo = new botontwo();
         stage.addChild(Botontwo);
         Botontwo.x = 415;
         Botontwo.y = 350;
         Botontwo.addEventListener(MouseEvent.MOUSE_DOWN,twohandler);
      }
      
      public function onehandler(e:MouseEvent)
      {
         stage.removeChild(Titulo);
         stage.removeChild(Resumen);
         stage.removeChild(Botonone);
         stage.removeChild(Botontwo);
         
         Cuenta = new cuentatras();
         stage.addChild(Cuenta);
         Cuenta.x = 400;
         Cuenta.y = 220;
         
         Fondo = new fondo();
         stage.addChild(Fondo);
         
         Caracolarriba = new caracolarriba();
         stage.addChild(Caracolarriba);
         Caracolarriba.x = 610;
         Caracolarriba.y = 120;
         
         Caracolabajo = new caracolabajo();
         stage.addChild(Caracolabajo);
         Caracolabajo.x = 120;
         Caracolabajo.y = 330;
         
         Botonabajo = new botonabajo();
         stage.addChild(Botonabajo);
         Botonabajo.x = 30;
         Botonabajo.y = 400;
         
         setTimeout(oneracehandler,3000);
         
      }
      
      public function oneracehandler()
      {
         stage.removeChild(Cuenta);
         
          var carrera:Tween = new Tween(Caracolarriba,"x",Regular.easeIn,610,30,300);
         
         Caracolarriba.addEventListener(Event.ENTER_FRAME,perdedorhandler);
         
         Botonabajo.addEventListener(MouseEvent.MOUSE_DOWN,racedownhandler);
         
      }
      
      public function perdedorhandler (Event)
      {
         if (Caracolarriba.x == 30)
         {
            Pierdes = new pierdes();
            stage.addChild(Pierdes);
            Pierdes.x = 390;
            Pierdes.y = 300;
            Botonabajo.visible = false;
            setTimeout (parar,1);
         }
         
      }
      
      public function parar()
      {
         Caracolarriba.removeEventListener(Event.ENTER_FRAME,perdedorhandler);
      }
      
      public function racedownhandler(e:MouseEvent)
      {
         Caracolabajo.x = Caracolabajo.x + 10;
         if (Caracolabajo.x == 710)
         {
            WIN1 = new ganador1();
            stage.addChild(WIN1);
            WIN1.x = 280;
            WIN1.y = 300;
            Botonabajo.visible = false;
            carrera.stop();
         }
         
      }
      
      public function twohandler(e:MouseEvent)
      {
         trace ("funciona2");
      }
      
      
   }
   
}


gracias

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 09:07 pm
a ver, he cambiado carrera por Carrera para que no hubiese confusión con la función constructora que también se llama carrera y... pues ya no me da ese error, me sale la película correctamente pero ahora falla cuando el objeto que manejo yo llega a meta y debe ejecutarse la linea de Carrera.stop();
me sale esto:
Cannot access a property or method of a null object reference
a ver si lo sacamos de una vez! je je je
muchas gracias

Por oliwan

15 de clabLevel



 

safari
Citar            
MensajeEscrito el 12 Mar 2013 09:52 pm
Cambia a mayúsculas en todos lados, no solo en donde lo declaras.

En lo que posteaste veo que lo vuelves a declarar

var carrera:Tween = new Tween(Caracolarriba,"x",Regular.easeIn,610,30,300);

en vez de hacer

carrera = new Tween(Caracolarriba,"x",Regular.easeIn,610,30,300);

.. y no uses mayúscula/minúscula, cambiale el nombre a otra cosa que no se confunda

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Mar 2013 11:09 pm
POR FINNNNN!!!!
muchísimas gracias jorge, al final ya lo he sacado y después de otro sustillo a costa del enterframe pues gracias a tu ayuda ya funciona perfectamente... esa parte! ya he puesto también con algunos settimeout para que una vez llegado a meta sea quien sea vuelva a la pantalla inicial...

ahora empiezo a programar la parte en la que juegan dos jugadores uno contra otro, seguro que vuelvo a dar el coñazo por aquí porque algo pasara, je je

saludos y lo dicho, muchas gracias crack!!!!

Por oliwan

15 de clabLevel



 

safari

 

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