Comunidad de diseño web y desarrollo en internet online

enterFrame.... grrr

Citar            
MensajeEscrito el 24 Jun 2008 05:48 pm
Ok... tengo esto en As 2.0

Código :


boton_mc.stop();
boton_mc.onRollOver = function(){
   this.onEnterFrame = function(){
      if(this._currentframe < this._totalframes){
         this.nextFrame();
      }else{
         delete this.onEnterFrame;
      }
   }
}
boton_mc.onRollOut = function(){
   this.onEnterFrame = function(){
      if(this._currentframe >1){
         this.prevFrame();
      }else{
         delete this.onEnterFrame;
      }
   }
}


Ahora... lo quiero pasar a AS 3.0 y esto fue lo que resultó

Código :

var flag:Boolean = new Boolean(false);

anima_mc.stop();
anima_mc.addEventListener("enterFrame",animacion);

anima_mc.addEventListener(MouseEvent.MOUSE_OVER,over);
anima_mc.addEventListener(MouseEvent.MOUSE_OUT,out);

function over(e:MouseEvent):void{
   flag = true;
}
function out(e:MouseEvent):void{
   flag = false;
}

function animacion(event:Event):void{
   if(flag == true){
      anima_mc.nextFrame();
   }else{
      anima_mc.prevFrame();
   }
}


Pero el problema es que el procesador NUNCA descansa... no entiendo cómo activar y desactivar onEnterFrame en As 3.0 :(

:S:S:S:S:S

Espero alguien me pueda ayudar, gracias

Saludos

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jun 2008 06:15 pm
con addEventListener lo activas y con removeEventListener lo desactivas.

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 24 Jun 2008 06:32 pm
Amiguito, con removeEventListener queda listín listón:

Código :

var flag:Boolean = new Boolean(false);
anima_mc.stop();
anima_mc.addEventListener(MouseEvent.MOUSE_OVER,over);
anima_mc.addEventListener(MouseEvent.MOUSE_OUT,out);
function over(e:MouseEvent):void {
   anima_mc.addEventListener("enterFrame",animacion);
   flag = true;
}
function out(e:MouseEvent):void {
   anima_mc.addEventListener("enterFrame",animacion);
   flag = false;
}
function animacion(event:Event):void {
   trace("entreFrame");
   if (flag == true) {
      if (anima_mc.currentFrame < anima_mc.totalFrames) {
         anima_mc.nextFrame();
      } else {
         anima_mc.removeEventListener("enterFrame",animacion);
         trace("removido");
      }
   } else {
      if (anima_mc.currentFrame >1) {
         anima_mc.prevFrame();
      } else {
         anima_mc.removeEventListener("enterFrame",animacion);
         trace("removido2")
      }
   }
}

Por vuh

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jun 2008 07:07 pm
ah pus si vea... ya decía mi maestro.. .a todo "set hay un "get" ... por consiguiente a todo add hay un remove (malditas drogas!!! neta no se metan nada de esas cosas >.<) jajjaa

Saludos y mil gracias, con eso haré y desharé mil cosas.

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jun 2008 07:37 pm
Ahora... me surgió otra duda...

en el ejemplo de AS 2.0 [url="#388373"]hasta arriba[/url] uso "this" para hacer referencia a su evento... ese mismo código lo tiendo a utilizar con un "for" para hacer galerías (eso de hacer 100 botones a mano no es negocio)

cómo le hago en AS 3 para referir un evento a "this" y no a un MC en particular... lo meto dentro del MovieClip y lo manejo de una manera "local" o se puede con el for?

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jun 2008 07:38 pm
Digo... de que se puede se puede... pero cómo se le dice a Flash eso pues jejeje

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Jun 2008 10:35 am
Si los botones están en la escena (10 por ejemplo) y sus nombres de instancia son boton1, boton2, boton3, etc:

Código :

var i:uint;

for(i = 1; i <= 10; i++){
   
   //Suponiendo que el código esté en la document class this accede a la root de la escena
   this["boton"+i].addEventListener(MouseEvent.CLICK, traceSomething);
   
}

function traceSomething(evt:MouseEvent):void{
   
   trace(evt.target.name);
   
}


Si los creas dinamicamente:

Código :

var i:uint;
var boton:Sprite;
var posX:Number = 20;

for(i = 1; i <= 3; i++){
   
   boton = new Sprite();
   
   with(boton.graphics){
      
      beginFill(0xCCCCCC, 1);
      drawRect(0, 0, 100, 20);
      endFill();
      
   }
   
   boton.x = posX;
   boton.y = 200;
   
   boton.addEventListener(MouseEvent.CLICK, traceSomething);
   
   addChild(boton).name = "boton" + i;
   
   posX += boton.width + 20;
   
}

function traceSomething(evt:MouseEvent):void{
   
   trace(evt.target.name);
   
}


Si quieres acceder a ellos y están dentro de otro movie en la escena

Código :

movie["boton"+i].addEventListener(MouseEvent.CLICK, traceSomething);


Si el movie fue creado dinamicamente y con nombre "movie"

Código :

var movie = getChildByName("movie") as MovieClip;
var boton:Sprite;

boton = movie.getChildByName("boton"+i) as Sprite;
boton.addEventListener(MouseEvent.CLICK, traceSomething);

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 01 Jul 2008 06:46 pm
:( bueno... pues sigo peleando con esto y no me sale >.<

mi código:

Código :

var i:uint;
var lista:Array = new Array();
lista[0] = "contacto_mc";
lista[1] = "curriculum_mc";
lista[2] = "noticias_mc";
lista[3] = "portfolio_mc";
for(i = 1; i <= 4; i++){
      var flag:Boolean = new Boolean(false);

   lista[i-1].stop();
   lista[i-1].addEventListener(MouseEvent.MOUSE_OVER,over);
   lista[i-1].addEventListener(MouseEvent.MOUSE_OUT,out);
   
   function over(e:MouseEvent):void {
      lista[i-1]].addEventListener("enterFrame",animacion);
      flag = true;
   }
   function out(e:MouseEvent):void {
      lista[i-1]].addEventListener("enterFrame",animacion);
      flag = false;
   }
   function animacion(event:Event):void {
      trace("entreFrame");
      if (flag == true) {
        if (lista[i-1]].currentFrame < lista[i-1]].totalFrames) {
          lista[i-1]].nextFrame();
        } else {
          lista[i-1]].removeEventListener("enterFrame",animacion);
          trace("removido");
        }
      } else {
        if (lista[i-1]].currentFrame >1) {
          lista[i-1]].prevFrame();
        } else {
          lista[i-1]].removeEventListener("enterFrame",animacion);
          trace("removido2")
        }
      }
   }


}


y me despliega el error:

Código :

TypeError: Error #1006: value no es una función.
   at base_fla::Menu_6/frame1()


Los botones están dentro de otro MovieClip... están en la escena y nada más son 4. Quiero que quede esto porque definitivamente si entiendo esto, creo que voy a poder hacer más cosas con AS3 (que quiero hacer todo ya con eso, pero pues no soy Ing en sistemas ni Lic en Informática)

Espero me puedan ayudar, mil gracias

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jul 2008 06:49 pm
Ah cierto... antes para hacer eso en AS 2.0 utilizaba

Código :

eval(lista[i-1]);


Y funciona perfectamente junto con otro poquito de código... lo que quiero es hacer eso acá en AS3 ... pero pues no queda...

traté por el método que elchininet propuso (usando this["boton"+i"]) pero no entiendo cómo funciona lo del Document Class (cada vez que meten más y más clases más me revuelvo, aunque sé que tengo que pasar por ahí) y de todas maneras no funcionó :(

Bueno, saludos

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jul 2008 09:15 am
Stockman, si quieres eliminar un onEnterFrame se hace de la misma manera que lo creas:

Código :

//Crear el event listener
boton.addEventListener(Event.ENTER_FRAME, someFunction);

//Eliminarlo
boton.removeEventListener(Event.ENTER_FRAME, someFunction);


En AS3 el comando eval ya no se utiliza quedó obsoleto, para esto tendrás que utilizar lo que está dentro del ejemoplo de eval que posteas:

Código :

lista[i-1]

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 02 Jul 2008 07:20 pm
De hecho, eval está obsoleto desde AS2, se mantuvo por compatibilidad con versiones anteriores, pero no se recomienda su uso.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

mozilla
Citar            
MensajeEscrito el 02 Jul 2008 07:40 pm
ok... sabiendo eso el código debería ser

Código :

lista[i-1].addEventListe...


Ahora que ya lo hice me sal un error que ni siquiera sé que significa :(

(y no entiendo porqué el error aparece en español pero bue...)

Código :


var lista:Array = new Array();
lista[0] = contacto_mc;
lista[1] = curriculum_mc;
lista[2] = noticias_mc;
lista[3] = portafolio_mc;
var i:uint;

for(i = 1; i <= 4; i++){
      var flag:Boolean = new Boolean(false);

   lista[i-1].stop();
   lista[i-1].addEventListener(MouseEvent.MOUSE_OVER,over);
   lista[i-1].addEventListener(MouseEvent.MOUSE_OUT,out);
   
   function over(e:MouseEvent):void {
      lista[i-1].addEventListener("enterFrame",animacion);
      flag = true;
   }
   function out(e:MouseEvent):void {
      lista[i-1].addEventListener("enterFrame",animacion);
      flag = false;
   }
   function animacion(event:Event):void {
      trace("entreFrame");
      if (flag == true) {
        if (lista[i-1].currentFrame < lista[i-1].totalFrames) {
          lista[i-1].nextFrame();
        } else {
          lista[i-1].removeEventListener("enterFrame",animacion);
          trace("removido");
        }
      } else {
        if (lista[i-1].currentFrame >1) {
          lista[i-1].prevFrame();
        } else {
          lista[i-1].removeEventListener("enterFrame",animacion);
          trace("removido2")
        }
      }
   }
}



MENSAJE DE ERROR EN EL OUTPUT

Código :


TypeError: Error #1010: Un término no está definido y no tiene propiedades.
   at base_fla::Menu_6/over()
TypeError: Error #1010: Un término no está definido y no tiene propiedades.
   at base_fla::Menu_6/out()



Cabe mencionar que el error aparece cuando paso el Mouse por el MovieClip

Muchas gracias por su ayuda

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Jul 2009 07:09 am
Hola tengo un problema estoy tratando de realizar un gotoandstop pero no me resulta
y no me lanza ningún error pero no me lleva a la fotograma donde tengo a etiqueta esta esta en la Escena 2

Código ActionScript :

//Boton Flickr
function irpagina(event:MouseEvent):void
{
var targetURL:URLRequest = new URLRequest("http://www.flickr.com/photos/claudiomancilla/");
navigateToURL(targetURL);
}
BTNS.btn_f.addEventListener(MouseEvent.CLICK,irpagina);

//Boton Contacto
function accion(event:Event):void
{
gotoAndStop("cuadro2");
};
BTNS.btn_c.addEventListener(MouseEvent.CLICK,accion);


el botón (btn_c)lo tengo dentro de un clip de película (BTNS)
aquí puedes ver la pagina que estoy asiendo para que entiendan mas

http://www.claudiomancilla.cl/newweb/

por favor ayuda soy nuevo en as3 :lol:

Por neobiker

1 de clabLevel



 

safari
Citar            
MensajeEscrito el 15 Jul 2009 01:56 pm

Código :

function accion(event:MouseEvent):void 
{ 
gotoAndStop("cuadro2"); 
}; 


el tipo de evento de esa función debe ser MouseEvent, así te debe funcionar

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Jul 2009 07:41 pm
Stockman gracias pero no me funciono y los mas raro es que no me envía ningún error

saludos

Por neobiker

1 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Jul 2009 10:58 pm
Prueba hacer el cast a MovieClip de root como en este post, pero si vas a trabajar con la línea de tiempo haciando gotoAndStops no utilices AS3 para esto, lee mejor el post de Jorge al final, realmente es un buen consejo.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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