Que tal.
Bueno este efecto se consigue usando 2 cosas.
1.- Cambiando el punto de registro(RegisterPoint) del Movieclip, para que su rotacion cambie de acuerdo a este
2.- Aplicando formulas matematicas para setear la velocidad de la rotacion dependiendo los moviemientos del Mouse.
Aqui les voy a explicar el primer punto ya que el segundo es mucho mas tedioso. jaja..
Como dije, lo primero hay que cambiar el punto de registro de cada movieClip de acuerdo a las coordenadas en donde se dio click.
Para ello voy a usar una clase de Oscar trelles
http://www.oscartrelles.com/archives...ation_with_as3
Con esta clase se cambia el punto de registro, ahora solo nos queda generar los elementos y aplicarles sus listeners para que hagan lo debido. la clase final queda asi.
Código:
package net.tmeister.samples.registerPoint
{
import flash.display.StageScaleMode;
import flash.display.MovieClip;
import flash.ui.Mouse;
import net.tmeister.samples.registerPoint.DynamicMovie
import flash.events.MouseEvent;
import flash.events.Event
public class Main extends MovieClip
{
private const ITEMS:uint = 5;
private const ROTATION:uint = 30
public function Main()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
initialize();
}
private function initialize():void
{
var basex:uint = 100;
var basey:uint = 100;
for (var a:uint = 0; a < ITEMS; a++)
{
var clip = new DynamicMovie();
clip.addChild( createBox() );
clip.y = clip.x = basex
basey = basex += 25
clip.addEventListener(MouseEvent.MOUSE_DOWN, initDrag);
clip.addEventListener(MouseEvent.MOUSE_UP, endDrag);
addChild(clip)
}
}
private function initDrag(e:MouseEvent):void
{
var target:MovieClip = e.currentTarget as MovieClip
target.startDrag();
setChildIndex(target, numChildren -1 )
target.setRegistration(target.mouseX, target.mouseY);
target.addEventListener(Event.ENTER_FRAME, rotate);
}
private function endDrag(e:MouseEvent):void
{
var target:MovieClip = e.currentTarget as MovieClip
target.stopDrag()
target.removeEventListener(Event.ENTER_FRAME, rotate)
}
private function rotate(e:Event):void
{
var target:MovieClip = e.currentTarget as MovieClip;
target.rotation2 += ROTATION
}
private function createBox():MovieClip
{
var tmp:MovieClip = new MovieClip();
tmp.graphics.lineStyle(3, 0x005064, 1);
tmp.graphics.beginFill(0x00B0DD, 1);
tmp.graphics.drawRect(0, 0, 120, 140);
tmp.graphics.endFill();
return tmp;
}
}
}
El resultado final lo pueden ver en
http://klr20mg.com/archivos/registerPoint/main.swf
y todos los archivos fuente aqui
http://klr20mg.com/archivos/register...isterPoint.zip
Saludos!!