Comunidad de diseño web y desarrollo en internet online

Cambiar centro de rotación de un Movieclip en ActionScript 2

Hoy me encontré pensando en si sería posible que una imagen en Flash pudiera ser rotada desde cualquier punto a través de Action Script 2 y no solo desde su centro. Por supuesto, no hay ninguna función directa pero la trigonometría tiene una solución para todo, en este tip mostraré como lograrlo.

He colocado el siguiente código en la raíz (_root) del documento:

Código :

/* NOTA: En las funciones atan2, la suma y resta de ángulo
se debe a que queremos ajustar el "origen" de los ángulos,
siendo este "origen" el lugar donde el ángulo es 0 */
import flash.geom.Point
function anguloMouse(MC:MovieClip){
   return 90 - Math.atan2(_xmouse - MC._x,_ymouse - MC._y)*180/Math.PI
}
function anguloMCs(MC1:MovieClip,MC2:MovieClip){
   return Math.atan2(MC1._y - MC2._y,MC1._x - MC2._x)*180/Math.PI + 180
}
function distMCs(MC1:MovieClip,MC2:MovieClip){
   return Point.distance(new Point(MC1._x,MC1._y),new Point(MC2._x, MC2._y))
}
this.onMouseDown = function(){
   this.rotar = true
   // Rotación Interior
   angulo_triangulo1 = anguloMouse(centro_mc)
   Rot_Inicial = img_mc._rotation
   // Rotación Exterior
   angulo_inicial = anguloMCs(img_mc,centro_mc)
   hipo_imagen = distMCs(img_mc,centro_mc)
}
this.onMouseUp = function(){
   this.rotar = false
}
this.onMouseMove = function(){
   if(this.rotar && !centro_mc.arrastrar){
      // Rotación Interior
      angulo_triangulo2 = anguloMouse(centro_mc)
      angulo_descrito = angulo_triangulo2 - angulo_triangulo1
      this.img_mc._rotation = Rot_Inicial + angulo_descrito
      // Rotación Exterior
      var angulo_giro:Number = (angulo_inicial + angulo_descrito + 180)*Math.PI/180
      var coordenadas:Point = Point.polar(hipo_imagen,angulo_giro)
      this.img_mc._x = coordenadas.x + centro_mc._x
      this.img_mc._y = coordenadas.y + centro_mc._y
   }
   updateAfterEvent()
}
Donde “img_mc” es la imagen que se rota y “centro_mc” es el clip de película que el usuario cambia de posición para poder mover el centro de rotación. El código que lleva este clip es el siguiente:

Código :

arrastrar = false
onPress = function(){
   // startDrag(this,true)
   arrastrar = true
   this._x = _parent._xmouse
   this._y = _parent._ymouse
}
onRelease = function(){
   // stopDrag()
   arrastrar = false
}
onMouseMove = function(){
   if(arrastrar){
      this._x = _parent._xmouse
      this._y = _parent._ymouse
   }
   updateAfterEvent()
}
También podría hacerse de igual manera con un startDrag(this,"") y stopDrag(), pero de esta manera ya no dependemos de los FPS.Espero sus comentarios, gracias.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate