Comunidad de diseño web y desarrollo en internet online

AYUDA!! Zoom In & Zoom out (xscale-yscale)

Citar            
MensajeEscrito el 28 Feb 2009 06:26 pm
Hola mi nombre es Mariano siempre consultaba el foro para ejemplos, dudas, etc. Les cuento que desde hace mas de 1 años estoy progamando en flash. El tema que me trae es el siguiente :
Estoy tratando de hacer un efecto de "zoom in y zoom out" por codigo (as2) sin tener que animar ninguna movie ni nada parecido. Lo que tengo en mi fla es 6 movieClips con una imagen y programar por codigo que al hacer rollOver y rollOut dicha imagen se agrande y achique. Estoy usando las propiedades "_xscale e _yscale" de la clase MovieClip y la clase Tween, lo programe y anda perfecto solo que rompe cuando paso mi mouse rapido por cada movie al parecer ser rompe las propiedades xscale e yscale las movies quedan o mas grande que antes o mas chica.

Por favor cualquier ayuda la agradecer. Adjunto el archivo .fla y el codigo para que lo prueben, pasen su mouse rapido por cada movieclip y van a notar que algun que otro movieclip queda mas grande o mas chico. Yo creo que es porque como no esta terminando la animacion del primer movieclip y al hacer rollover en el segundo ahi rompe porque si hago rollover sobre una movie espero unos segundos y hago rollout no se rompe.

Código :

stop();

import mx.transitions.Tween;
import mx.utils.Delegate;


var speedValue:Number;
var incrValue:Number;
var xIni;
var yIni;
var xFin;
var yFin;

for(var i:Number=0;i<6;i++) {
 //trace("item :"+this["item"+(i+1)+"_mc"]);
 this["item"+(i+1)+"_mc"].onRollOver = Delegate.create(this["item"+(i+1)+"_mc"],rollOver);
 this["item"+(i+1)+"_mc"].onRollOut = Delegate.create(this["item"+(i+1)+"_mc"],rollOut);
}

function finish () {
 trace("xIni Y :"+xIni);
 trace("yIni Y :"+yIni);
 trace("escala X :"+this._xscale);
 trace("escala Y :"+this._yscale);

}

function rollOver () : Void {
xIni = this._xscale;
yIni = this._yscale;
xFin = xIni+incrValue;
yFin = yIni+incrValue;
var xOver:Tween = new Tween(this, "_xscale", Regular.easeOut, xIni,xFin+incrValue, speedValue);
var twenObj:Tween = new Tween(this,"_yscale", Regular.easeOut, yIni,yFin +incrValue, speedValue);
}

function rollOut() : Void {
//trace("rollOut "+this);
var xOut:Tween = new Tween(this,"_xscale",Regular.easeOut,xFin,xIni,speedValue);
var twenObj:Tween = new Tween(this,"_yscale",Regular.easeOut,yFin,yIni,speedValue);
twenObj.onMotionFinished = Delegate.create(this,finish);
}

archivo swf : [url=http://www.filedropper.com/turnos2p6v2][/url]

Por MarianoM

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Mar 2009 08:19 pm
Usa hitTest en lugar de rollOver y RollOut.

Código ActionScript :

clip.onEnterFrame = function(){ 
   var aux:Boolean = this.hitTest( _root._xmouse, _root._ymouse ); 
   if ( aux != this.isOver )  
   { 
      this.isOver = aux; 
      if( this.isOver ) 
      { 
         trace("Over");
      } 
      else 
      { 
         trace("Out");
      } 
   } 
}; 


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 05 Mar 2009 12:35 am
tambien. pero les agradezco ya lo solucione. Mi error estaba en que los valores "xscale e yxcale" no los tengo que incrementar cuando hago rollOver desde su "xscale" mismo sino que tengo que darle siempre una constante fija tanto para zoom in como zoom out . Agrego el codigo corregido para que vean funciona de pelos ;)

Código :

stop();

import mx.transitions.Tween;
import mx.utils.Delegate;

var speedValue:Number; //velocidad en segundos
var xIni:Number;       //propiedas xscale inicial del movieCip   
var yIni:Number;       //propiedas yscale inicial del movieCip

/*seteo para que cada movie escuche sus eventos de rollOver y rollOut usando el metodo statico de la clase Delagate*/
function init() {
   for(var i:Number=0;i<6;i++) {
    this["item"+(i+1)+"_mc"].onRollOver = Delegate.create(this["item"+(i+1)+"_mc"],rollOver);
    this["item"+(i+1)+"_mc"].onRollOut = Delegate.create(this["item"+(i+1)+"_mc"],rollOut);
   }
}
/*el number 200 valor constante en porcentaje que se va a ir incrementando las propiedas xscla e yscale*/
function rollOver () : Void {
xIni = this._xscale;
yIni = this._yscale;
var twenObj_xscale:Tween = new Tween(this, "_xscale", Strong.easeOut, xIni,200, speedValue);
var twenObj_yscale:Tween = new Tween(this,"_yscale", Strong.easeOut, yIni,200, speedValue);
}

function rollOut() : Void {
var twenObj_xscale:Tween = new Tween(this,"_xscale",Strong.easeOut,xIni,100,speedValue);
var twenObj_yscale:Tween = new Tween(this,"_yscale",Strong.easeOut,yIni,100,speedValue);
}


Y colocan en un fla cualquiera con X cantidad de movies (las cuales basta con que sean movieClips con una imagen de fondo) el siguiente codigo:

Código :

#include "zoom.as"
speedValue=7;
incrValue = 100;
init();


Atencion si tienen mas de 6 movies o menos tienen que modificar la condicion "For" segun corresponda.!

Saludos, cualquier duda me escriben!!

Por MarianoM

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Mar 2009 12:52 am
Perfecto ^^

Una cosa mas, tu avatar excede el tamaño minimo, reducelo un poco 100x100 :D

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

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