Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/04/2010, 07:20
lucasbanegas
 
Fecha de Ingreso: marzo-2010
Ubicación: Córdoba, Argentina
Mensajes: 21
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Necesito ayuda de un experto en ActionScript

Archivo Carrousel.as

Código:
import flash.filters.BlurFilter;
import mx.utils.Delegate;
class oxylus.carousel.Carousel extends MovieClip {
	private var node:XMLNode;
	private var _vertical:Boolean;
	private var _autoMove:Boolean;
	private var _speed:Number;
	private var _maxSpeed:Number;
	private var _radiusx:Number;
	private var _radiusy:Number;
	private var _stopOnRollover:Boolean;
	private var _allButtons:Boolean;
	private var _blurScale:Number;
	private var _hitW:Number;
	private var _hitH:Number;
	private var xml:XML;
	private var Thumbs:Array;
	private var refAngle:Number = 0;
	private var angle:Number;
	private var baseDepth:Number;
	private var once:Boolean = false;
	public function Carousel() {
		Thumbs = new Array();
		xml = new XML();
		xml.ignoreWhite = true;
		xml.onLoad = Delegate.create(this, dataLoaded);
		xml.load("carousel.xml");
	}
	private function dataLoaded(s) {
		if (!s) {
			trace("Could not load xml ! Check xml (must be carousel.xml)");
			return;
		}
		node = xml.firstChild;
		_vertical = node.attributes.vertical == "yes";
		_autoMove = node.attributes.autoMove == "yes";
		_maxSpeed = _speed=Number(node.attributes.maxSpeed);
		_radiusx = Number(node.attributes.radiusX);
		_radiusy = Number(node.attributes.radiusY);
		_blurScale = Number(node.attributes.blurScale);
		_stopOnRollover = node.attributes.stopOnRollover == "yes";
		_allButtons = node.attributes.allButtons == "yes";
		_hitW = Number(node.attributes.hitAreaWidth)/2;
		_hitH = Number(node.attributes.hitAreaHeight)/2;
		_radiusx = Number(node.attributes.radiusX);
		//
		var p:XMLNode = node.firstChild;
		var i:Number = 0;
		baseDepth = this.getNextHighestDepth();
		for (; p != null; p=p.nextSibling, i++) {
			var tn:MovieClip = this.attachMovie("Thumbnail", "tn"+i, baseDepth+i);
			tn.setData(p, node);
			if (_stopOnRollover) {
				tn.onMouseOver = Delegate.create(this, Pause);
				tn.onMouseOut = Delegate.create(this, Resume);
			}
			Thumbs.push(tn);
			//break;
		}
		angle = 360/Thumbs.length;
		if (!_autoMove) {
			spin();
			this.onMouseMove = mouseMoveHandler;
		} else {
			Resume();
		}
	}
	private function Pause() {
		delete this.onEnterFrame;
	}
	private function Resume() {
		this.onEnterFrame = spin;
	}
	private function spin() {
		for (var i = 0; i<Thumbs.length; i++) {
			var tn:MovieClip = Thumbs[i];
			var crtAngle:Number = (refAngle+i*angle)%360;
			if (crtAngle<0) {
				crtAngle += 360;
			}
			if (_vertical) {
				tn._x = Math.sin((crtAngle)/180*Math.PI)*_radiusy;
				tn._y = Math.cos((crtAngle)/180*Math.PI)*_radiusx;
			} else {
				tn._y = Math.sin((crtAngle)/180*Math.PI)*_radiusy;
				tn._x = Math.cos((crtAngle)/180*Math.PI)*_radiusx;
			}
			//
			var tAngle:Number = (crtAngle+90)%360;
			if (tAngle>180) {
				tAngle = 360-tAngle;
			}
			var minScale:Number = 50;
			var minAlpha:Number = 30;
			tn._xscale = tn._yscale=minScale+(100-minScale)*tAngle/180;
			var lim:Number = 90;
			if (tAngle<=lim) {
				tn.filters = blur(_blurScale-_blurScale*tAngle/lim);
				tn._alpha = minAlpha+(100-minAlpha)*tAngle/lim;
			} else {
				tn.filters = blur[0];
				tn._alpha = 100;
			}
			var crtDepth:Number = baseDepth+Math.floor(2*tAngle/angle);
			if (tn.getDepth() != crtDepth) {
				tn.swapDepths(crtDepth);
			}
			if (!_allButtons) {
				tn.enabled = tAngle>=90;
			}
		}
		refAngle += _speed;
	}
	private function blur(blur) {
		blur = Math.round(blur);
		if (blur<1) {
			return [];
		}
		return [new BlurFilter(blur, blur, 2)];
	}
	private function mouseMoveHandler() {
		if (_xmouse<-_hitW || _xmouse>_hitW || _ymouse<-_hitH || _ymouse>_hitH) {
			return;
		}
		if (!once) {
			once = true;
			Resume();
		}
		if (!_vertical) {
			_speed = _maxSpeed*_xmouse/_hitW;
		} else {
			_speed = _maxSpeed*_ymouse/_hitH;
		}
	}
}