Lo que voy a colocar a continuación es una adaptación en AS3, del famoso tutorial de Rosvel para construcción de botones animados, con la intención (hasta ahora frustrada) de poder reutilizar el código para varios botones.

////////////// PASOS ////////////////

1 - Colocar en el palco una imágen que se comportará como un botón;
2 - Dando un F8 la convertimos en un movieclip y la instanciamos con el nombre de mc_animado
Dando un doble click sobre ella entramos en la TL, creamos un nuevo layer y hacemos en él la animación con algún tipo de Motion Tween. Hacemos otro layer y en él colocamos dos stops uno en el primero y otro en el último frame. Lo bautizamos a este último de \"fin\".
3 - Volvemos a la TL principal y seleccionando este MovieClip lo transformamos nuevamente en MovieClip y lo instanciamos como mc_todo.
4 - Con un duplo clique entramos en su TL y creamos un nuevo layer donce colocamos un botón transparente que instanciamos como bnt_trans y volvemos a la TL principal.
5 - En nuestra layer action colocamos este código

mc_todo.btn_trans.addEventListener( MouseEvent.MOUSE_OVER, btn_trans_OVER );
mc_todo.btn_trans.addEventListener( MouseEvent.MOUSE_OUT, btn_trans_OUT );

function btn_trans_OVER( e:MouseEvent ):void
{
mc_todo.mc_animado.addEventListener( Event.ENTER_FRAME, mc_animado_ENTER_FRAME_OVER );
}

function mc_animado_ENTER_FRAME_OVER( e:Event ):void
{
if ( e.target.currentLabel != \\\"fim\\\" )
{
e.target.nextFrame();
}
else
{
e.target.stop();
e.target.removeEventListener( Event.ENTER_FRAME, mc_animado_ENTER_FRAME_OVER );
}
}

function btn_trans_OUT( e:MouseEvent ):void
{
mc_todo.mc_animado.addEventListener( Event.ENTER_FRAME, mc_animado_ENTER_FRAME_OUT );
}

function mc_animado_ENTER_FRAME_OUT( e:Event ):void
{
if (e.target.currentFrame != 1 )
{
e.target.prevFrame();
} else
{
e.target.stop();
e.target.removeEventListener( Event.ENTER_FRAME,mc_animado_ENTER_FRAME_OUT );
}
}

Las funciones responsables por analisar la posición en la TL están genéricas y pueden ser reutilizadas pero las de Enter_Frame no. Hay alguna forma de disminuir un poco mas este código?

Desde ya muchas gracias