Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/02/2008, 14:04
Avatar de TMeister
TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 3 meses
Puntos: 193
Re: Ayuda para lograr un efecto de arrastre como el de esta web.

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!!