¿Quieres registrarte?

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

15 de Junio del 2009
2,873 visitas

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.

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas flash actionscript

Comentarios | Enviar un comentario
:O Excelente aportación. Ya quiero llegar a mi depa pa empezar a jugar con el .fla.

Saludines
Por: alternaweb
Muy completo...
el link para visualizar el ejemplo no carga la pelicula
Por: 0skr
Pues yo acabo de probar y me cargó perfectamente :S Prueba de nuevo; sino, lo subiré a alguna otra web.
Por: nestorrente

nestorrente :

Prueba de nuevo; sino, lo subiré a alguna otra web.
Descuida, ya fueron alojados aquí en el servidor de Cristalab, disculpa las molestias. Buen tip por cierto,
Por: M@U

M@U :

Descuida, ya fueron alojados aquí en el servidor de Cristalab, disculpa las molestias.

Oh, pues gracias, porque el servidor donde estaban tampoco me dejaba linkearlos con la etiqueta "[flash]".
Por: nestorrente
Amigo no se casi nada de scripts y ando buscando rotar una figura 3d, es decir, quiero ir mostrando con el mouse, las caras de una figura 3d. Eso lo pienso hacer dentro de un programa diseñado en Flash. A lo mejor me estoy metiendo en "camisa de once varas", pero eso es lo que quiero y buscando, he conseguido este blog.
La figura pienso modelarla con alguna aplicacion para 3D. 3D studio Max probablemente. Gracias de antemano.
Por: Hola Nestor-blog
Buenazo... muy bien explicado. gracias y a jugar con el ;)
Por: checheno
Para "Hola Nestor-blog": Una vez intenté hacer algo parecido, pero de momento lo del 3D no lo controlo, así que siento no poder ayudarte.
Por: nestorrente
y en as3? alguien sabe como hacer esto?
Por: Sant-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.