Comunidad de diseño web y desarrollo en internet online

Ayuda en roll out y roll over de AS2 a AS3

Citar            
MensajeEscrito el 09 Oct 2009 12:24 am
Que tal como estan en un foro encotre el siguiente codigo en asp2 para realizar un roll out y roll over, el cual me funciono perfecto, pero en la pagina que estoy haciendo utilice el flashEffe 2.0 el cual solo funciona en AS3 por lo que el sript e AS2 pues no funciona, alguien me puede ayudar en migrarlo a AS3: les pego el codigo y tambien cual es la funcion de gotondplay (#frame) y gotondstop (#frame) Ya llevo 3 dias tratando de hacerlo, y reemplaze los codigo en AS3 pero no funciona

Codigo en AS2
//asignamos la acción del Over para que actue sobre nuestro movieclip
//que queremos reproducir
on (rollOver) {
mc_animado.onEnterFrame = function () {
//le decimos a ese MC que si se encuentra en cualquier número frame
//diferente a 41, avance al siguiente; es decir, si está en el 1
//avanzará al 2, después al 3...y asi sucesivamente

if (this._currentframe != 20) {
this.nextFrame();
}
//usando el "else" tomamos la comparativa que nos acomoda, que es "==".
//le decimos a ese MC que si se encuentra en el frame 41 se detenga
//y borre el "onEnterFrame"

else {
this.stop();
delete this["onEnterFrame"];
} // end if
};
}

//asignamos la accion del RollOut para que actue sobre nuestro movieclip
//que queremos reproducir
on (rollOut) {
mc_animado.onEnterFrame = function () {
//le decimos a ese MC que si se encuentra en cualquier número frame
//diferente a 1, retroceda al anterior; es decir, si está en el 41
//regresará al 40, después al 39...y así continuamente.

if (this._currentframe != 1) {
this.prevFrame();
}
//usando el "else" tomamos la comparativa que nos acomoda, que es "==".
//le decimos a ese MC que si se encuentra en el frame 1 se detenga
//y borre el "onEnterFrame"

else {
this.stop();
delete this["onEnterFrame"];
} // end if
};

}

El cua funciona super bien
http://www.ideasvisuales.com/democlientes/losolivos/botonubicacion.swf

Pero mi swf debe de estar en AS3 e hice esto:

//this.enter_btn.addEventListener(MouseEvent.CLICK, callLink); // click al boton -> callLink
this.enter_btn.addEventListener(MouseEvent.ROLL_OVER,callOver); // mouse sobre
this.enter_btn.addEventListener(MouseEvent.ROLL_OUT,callOut); // mouse sale
this.mc_animado.addEventListener(Event.ENTER_FRAME,efecto); // animación
var roll:Boolean=false;

//function callLink(event:MouseEvent):void {
// En AS3, sabemos, ya no existe getURL.
// var pagina:URLRequest = new URLRequest("http://www.cristalab.com/");
// navigateToURL(pagina);
//}
// cambiamos la variable roll si el mouse está encima, para activarla
function callOver(event:MouseEvent):void {
roll = true;
}
// si el mouse se va...
function callOut(event:MouseEvent):void {
roll = false;
}

// en el enterframe
function efecto(event:Event):void {
// mi movieclip_button tiene 20 frames, donde el 1 es el estado normal y el 20 el "over"
// si mouse encima y no estoy en "over" ... voy a él
if(roll && mc_animado.currentFrame < 20) {
mc_animado.nextFrame();
} else if(!roll && mc_animado.currentFrame > 1) {
mc_animado.prevFrame();
}
}

y no hace nada....

http://www.ideasvisuales.com/democlientes/losolivos/

En espera de que alguien me pueda ayudar
Saludos

Por gro

1 de clabLevel



 

msie8
Citar            
MensajeEscrito el 09 Oct 2009 03:50 am
hola, si tu movieClip tiene un tamaño de 20 frames esto es igual al totalFrames asi que prueba con este codigo:

Código ActionScript :

stage.frameRate = 30;
enter_mc.addEventListener(MouseEvent.CLICK, onClickButton);
enter_mc.addEventListener(MouseEvent.ROLL_OUT, onOutButton);
enter_mc.addEventListener(MouseEvent.ROLL_OVER, onOverButton);
enter_mc.stop();


function onClickButton(evt:MouseEvent):void
{
   var req:URLRequest = new URLRequest("http://cristalab.com");
   navigateToURL(req,"_self");
}

function onOutButton(evt:MouseEvent):void
{
   //trace(evt.target ,evt.type);
   evt.target.removeEventListener(Event.ENTER_FRAME,onFrameLoop);
   evt.target.addEventListener(Event.ENTER_FRAME,onBackFrameLoop);

}

function onOverButton(evt:MouseEvent):void
{
   //trace(evt.target ,evt.type);
   evt.target.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
   evt.target.addEventListener(Event.ENTER_FRAME,onFrameLoop);
}

function onFrameLoop(evt:Event):void
{
   //trace(evt.target, evt.type);
   if (evt.target.currentFrame < evt.target.totalFrames)
   {
      evt.target.nextFrame();
   }
   else
   {
      evt.target.removeEventListener(Event.ENTER_FRAME, onFrameLoop);
   }
}

function onBackFrameLoop(evt:Event):void
{
   //trace(evt.target, evt.type);
   
   if (evt.target.currentFrame > 1)
   {
      evt.target.prevFrame();
   }
   else
   {
      evt.target.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
   }
}


este codigo es bastante util y dinamico por que si tu animacion es de menos fotagramas o mas, seguria funcionando bien , saludos.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 09 Oct 2009 06:33 am
Cuando veo a alguien preguntando en AS.3 attachando código en un botón con on(Release), me dan ganas de mandarlo al post donde cuento brevemente el paso de Flash5 a AS3 :)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Oct 2009 01:52 pm
Que tal Jonathn gracias por tu repuesta ya lo hice y el codigo kedo asi

stage.frameRate = 30;
import flash.events.MouseEvent;
import flash.events.EventDispatcher;
import flash.display.MovieClip;
mc_ub.stop();
btn_trans.addEventListener(MouseEvent.MOUSE_OVER,play_clip);
btn_trans.addEventListener(MouseEvent.MOUSE_OUT,stop_clip);
//btn_trans.addEventListener(MouseEvent.MOUSE_DOWN,go_clip);

function stop_clip(evento:MouseEvent):void {
mc_ub.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
mc_ub.addEventListener(Event.ENTER_FRAME,onFrameLoop);

}


function play_clip(evento:MouseEvent):void {
mc_ub.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
mc_ub.addEventListener(Event.ENTER_FRAME,onFrameLoop);

}
function onFrameLoop(evento:MouseEvent):void
{
if(mc_ub.CurrentFrame < mc_ub.totalFrames)
{
mc_ub.NextFrame();
}
else
{
mc_ub.removeEventListener(Event.ENTER_FRAME,onFrameLoop);
}
}


function onBackFrameLoop(evento:MouseEvent):void
{
if(mc_ub.CurrentFrame > 1)
{
mc_ub.prevFrame();
}
else
{
mc_ub.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
}
}


Pero cuando lo publico y paso el mouse marca este error:

TypeError: Error #1034: Error de conversión forzada: no se puede convertir flash.events::Event@597ed81 en flash.events.MouseEvent.

Que podra ser?

Por gro

1 de clabLevel



 

msie8
Citar            
MensajeEscrito el 12 Oct 2009 08:39 pm
eso es por que en el codigo que yo te puse los handler onFrameLoop y onBackFrameLoop vienen de un tipo Event por lo cual respoden con ese tipo y tu les pusiste que son MouseEvent.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox

 

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