Comunidad de diseño web y desarrollo en internet online

Timer con clase externa

Citar            
MensajeEscrito el 25 Oct 2008 07:44 pm
En el palco del fla tengo un movieclip instanciado como mcQuadrado, que debe aparecer después de 5 segundos ( 5000 milisegundos ).
En una clase externa tengo este código:

Código ActionScript :

package {
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.display.Sprite;
    import flash.display.MovieClip;

    public class TimerExample extends Sprite {
      
       var myTimer:Timer = new Timer(5000, 1);

        public function TimerExample() {
            myTimer.addEventListener("timer", aparecer);
            myTimer.start();
        }

        public function aparecer(event:TimerEvent):void {
            var container:Sprite = new Sprite();
            container.addChild(mcQuadrado);
            addChild ( container );
            parar();
        }
      
      public function parar():void {
         myTimer.removeEventListener("timer", aparecer);
      }
    }
}


Cuando ejecuto me devuelve el siguiente error:

1120 Access of undefined property mcQuadrado.

Alguien tiene una idea de cómo solucionar esto?

Desde ya muchas gracias. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Oct 2008 04:39 am
Hola mira, yo le pasaria a la clase el objeto a manejar, abstrayendo la funcion de la clase de el objeto.
de esta forma lo puedes usar con cualquier objeto en la aplicacion.. Sprite, MovieClip, TextFields etc...

Código ActionScript :

package { 
    import flash.utils.Timer; 
    import flash.events.TimerEvent; 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
 
    public class TimerExample extends Sprite { 
       
      private  var myTimer:Timer = new Timer(5000, 1); 
       private var ob:Object;
        public function TimerExample(obj:Object) { 
            myTimer.addEventListener("timer", aparecer); 
            myTimer.start(); 
            ob=obj;
        } 
 
        public function aparecer(e:TimerEvent):void { 
            this.addChild(ob); 
            parar(); 
        } 
       
      public function parar():void { 
         myTimer.removeEventListener("timer", aparecer); 
      } 
    } 
} 


entonces cuando lo uses cuando lo implemente sera algo asi.

Código ActionScript :

var nt:TimerExample = new TimerExample(mcQuadrado);


lo programe aquí asi que puede tener algún error pero el concepto de Manejo de objetos esta.
saludos

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 30 Oct 2008 06:51 pm
No consegui hacer este ejemplo funcionar. Por favor. si tienes un tiempito da una mirada para ver donde está el error.

Desde ya muchas gracias. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 31 Oct 2008 12:50 pm
El error del código de Claudio está en que hacemos un addChild sobre un Objeto TimerExample que no está añadido al stage. Supongo que se soluciona escribiendo

Código :

var nt:TimerExample = new TimerExample(mcQuadrado); 
addChild(nt)  //<---lo añadiremos

Aunque yo cambiaría la función aparecer por

Código ActionScript :

parent.addChild(ob);


El error que cometías tú es que mcQuadrado sólo es "accesible" desde la película principal.

Hablemos de cómo tener un MC en nuestro escenario
1.-Es simplemente ponerlo en el escenario, con nombre de instancia "mcQuadrado"
2.-No tenemos nada en el escenario, pero nuestro MC es de la clase McQuadrado, entonces escribimos

Código ActionScript :

var mcQuadrado:McQuadrado=new McQuadrado() 
addChild(mcQuadrado) 

(el paso 2 es la traducción que hace Flash cuando ponemos algo en el escenario)

Existen dos modos de enfocar el problema
1.-Tener un MC invisible y, pasados 5 segundos ponemos su propiedad visible a true.
2.-Crear una clase en la que al principio el MC esté invisible y, cuando se añada al stage, pasados 5 segundos poner su propiedad visible a true

Para el primer método crearemos un Timer en la película principal, le añadimos el evento "timer" y "listo el pollo".
Para el segundo método crearemos una calse que extienda de MovieClip.
En su función de creacción le pondremos la propiedad visible a false y le añadiremos el evento ADDED_TO_STAGE
La función del ADD_TO_STAGE creará un Timer, se le añadirá el evento "timer" y cambiaremos la propiedad visible a true en la función.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Nov 2008 10:08 am
Eliseo, antes que nada gracias por haberte dispuesto a ayudar.

Resolví mi problema de la siguiente forma. En la biblioteca hice el conocido proceso de clicar con btn derecho sobre el mcQuadrado abri linkage y lo exporté para ActionScript.

Fui al AS e hice:

Código ActionScript :

package {
    import flash.utils.Timer; 
    import flash.events.TimerEvent;
    import flash.display.MovieClip; 

    public class TimerExample extends MovieClip { 
      
   private var myTimer:Timer = new Timer(3000, 1); 

        public function TimerExample() {
       myTimer.addEventListener(TimerEvent.TIMER, aparecer);
            myTimer.start(); // ok
        }

        public function aparecer(e:TimerEvent):void {
       var bola:mcBola = new mcBola(); 
       bola.x = 350;
       bola.y = 300;
       this.addChild( bola );
       parar();
        }
      
   public function parar():void {
       myTimer.removeEventListener(TimerEvent.TIMER, aparecer);
   }
    }
}


existe alguna forma de omitir o substituir el paso del linkage?

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox

 

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