Comunidad de diseño web y desarrollo en internet online

Interpolación de forma con AS3

Citar            
MensajeEscrito el 11 Mar 2010 07:24 am
Hola, os cuento más o menos el problema que tengo, resulta que tengo un boton, bueno en realidad son 97, y en el estado sobre quiero hacer que tenga un efecto de aparición, para esto habría pensado hacer con el mismo objeto que hay en el estado sobre un clip de pelicula y en este hacer una interpolación de forma modificando el alpha de 0 a 100 y entonces así daría una sensación de aparición al ponerte sobre el boton. Mi duda es si este efecto lo podría hacer con actionscript 3 para que me permitiese cambiar el tiempo de duración del efecto, ya que al ser tantos botones si más adelante quiero que el efecto dure más tendría que ir accediendo a todos los clip de pelicula (a los 97) e ir cambiando la duración de la interpolación de forma uno a uno y resultaría muy lento.

Nota: mi boton se llama bt_1 y en el estado sobre tiene un clpi de pelicula llamado mc_bt_1 y dentro es donde he puesto la interpolación de forma


Un saludo y gracias

Por siropa

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 Mar 2010 08:39 am
Realmente no es una interpolación de forma -sino de movimiento- Y sí, sí es posible. Claro que hay que hacer unas pequeñas modificaciones a tus "botones".
En primer lugar, el "mc_bt_1" va a ocupar TODOS los frames, no sólo el frame OVER
En segundo lugar, y es IMPORTANTE, para poder usar la misma función para todos los botones, dicho MC se va a llamar IGUAL en TODOS los botones (p.e. "mc_bt")

Vale, hechos estos cambios, la diea es, en el mouseOVER crear un ENTER_FRAME y en el mouseOUT eliminarlo. Vamos a ello

Código ActionScript :

//añadimos los listeners a los botones, tanto el MOUSE_OVER como oel MOUSE_OUT
bt_1.addEventListener(MouseEvent.MOUSE_OVER,crearEnterFrame)
bt_1.addEventListener(MouseEvent.MOUSE_OUT,eliminarEnterFrame)

//Si tenemos más botones usamos la misma función
bt_2.addEventListener(MouseEvent.MOUSE_OVER,crearEnterFrame)
bt_3.addEventListener(MouseEvent.MOUSE_OUT,eliminarEnterFrame)


//La función crearEnterFrame, hace eso mismo, crea un ENTER_FRAME
function crearEnterFrame(e:MouseEvent){
  var mc:MovieClip=e.target.mc_bt  //<--"mc_bt"
  mc.addEventListener(Event.ENTER_FRAME,transformarMC)
}
//Simplemente eliminamos el ENTER_FRAME
function eliminarEnterFrame(e:MouseEvent){
  var mc:MovieClip=e.target.mc_bt
  mc.removeEventListener(Event.ENTER_FRAME,transformarMC)
  mc.alpha=0  //<--le ponemos el _alpha a 0
}
//Esta función es la que cambia el alpha de nuestro MC
//Lo he hecho de un modo lineal
function transformarMC(e:Event){
   var _alpha=e.target.alpha
   if (_alpha<1){
         _alpha+=.05
   }
   e.target.alpha=_alpha
}

NOTA:Observa como podemos usar la misma función para todo. Es el valor de "e.target" la que nos hace que sepamos a quién le está ocurriendo los eventos

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Mar 2010 09:47 am
Hola, estoy poniendo:
////////////////////////////////////////////////////////////////////
//añadimos los listeners a los botones, tanto el MOUSE_OVER como oel MOUSE_OUT
i_mc_municipios.i_bt_9_2.addEventListener(MouseEvent.MOUSE_OVER, crearEnterFrame);
i_mc_municipios.i_bt_9_2.addEventListener(MouseEvent.MOUSE_OUT, eliminarEnterFrame);


//La función crearEnterFrame, hace eso mismo, crea un ENTER_FRAME
function crearEnterFrame(e:MouseEvent){
var mc:MovieClip=e.target.mc_bt; //<--"mc_bt"
mc.addEventListener(Event.ENTER_FRAME,transformarMC);
}

//Simplemente eliminamos el ENTER_FRAME
function eliminarEnterFrame(e:MouseEvent){
var mc:MovieClip=e.target.mc_bt;
mc.removeEventListener(Event.ENTER_FRAME,transformarMC);
mc.alpha=0; //<--le ponemos el _alpha a 0
}

//Esta función es la que cambia el alpha de nuestro MC
//Lo he hecho de un modo lineal
function transformarMC(e:Event){
var _alpha=e.target.alpha;
if (_alpha<1){
_alpha+=.05;
}
e.target.alpha=_alpha;
}

y me da el error:
at archivo_fla::MainTimeline/eliminarEnterFrame()
ReferenceError: Error #1069: No se encontró la propiedad mc_bt en flash.display.SimpleButton y no hay ningún valor predeterminado.


y lo que he hecho es crear un clip de pelicula que abarca todos los estados

¿por que puede ser el error?

Un saludo

Por siropa

6 de clabLevel



 

msie
Citar            
MensajeEscrito el 11 Mar 2010 09:49 am
Bueno en reallidad da 2 errores al ponerse el raton sobre el boton:
ReferenceError: Error #1069: No se encontró la propiedad i_mc_bt en flash.display.SimpleButton y no hay ningún valor predeterminado.
at archivo_fla::MainTimeline/crearEnterFrame()
ReferenceError: Error #1069: No se encontró la propiedad i_mc_bt en flash.display.SimpleButton y no hay ningún valor predeterminado.
at archivo_fla::MainTimeline/eliminarEnterFrame()
ReferenceError: Error #1069: No se encontró la propiedad i_mc_bt en flash.display.SimpleButton y no hay ningún valor predeterminado.


Un saludo

Por siropa

6 de clabLevel



 

msie
Citar            
MensajeEscrito el 11 Mar 2010 04:51 pm
:glups: estamos hablando de un SimpleButton -perdona que no me haya fijado antes-
La verdad es que no "controlo" demadiado los simpleButton. Así que no sé si voy a acertar
Los SimpleButtons tienen una propiedad "overState". Creo que debería funcionar (es que no tengo CS.3 a mano) si le ponemos como propiedad overState "i_mc_bt". Luego, en lugar de referirnos al Mc como

Código ActionScript :

var mc:MovieClip=e.target.mc_bt 

Lo deberíamos cambiar por

Código ActionScript :

//ó por
var mc:MovieClip=e.target.overState as MovieClip
//ó por
var mc:DisplayObject=e.target.overState as DisplayObject

No sé si funcionará :(

Por Eliseo2

710 de clabLevel



 

firefox

 

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