www.pudn.com > photoFlow_AS3_001.rar > Photo.as
package com.flashloaded.as3{
import com.flashloaded.as3.PhotoFlow;
import flash.events.Event;
import com.flashloaded.as3.ImageContainer;
import flash.events.ProgressEvent;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import com.flashloaded.as3.tween.Easing;
import com.flashloaded.as3.Points;
import com.flashloaded.as3.effects.ReflectionEffect;
import com.flashloaded.as3.effects.PhotoEffect;
import com.flashloaded.as3.PhotoPreloadHolder;
public class Photo extends Item{
private var imageCon:ImageContainer;
private var imgCon:DisplayObject;
private var _photoWidth:Number=-1;
private var _photoHeight:Number=-1;
private var tx:Number=0;
private var ty:Number=0;
private var ts:Number=1;
private var eff:PhotoEffect;
private var tween:Easing;
private var _side:String;
private var _hpers:Number=0;
private var _vpers:Number=0;
//reflection
private var reflectEffect:ReflectionEffect;
//preloadHolder
private var preloadHolder:PhotoPreloadHolder;
public function Photo(){
}
override protected function createGraphic():void{
imageCon=new ImageContainer(data);
}
override protected function initPreloadVars():void{
var dindex:int=index-sys.selectedIndex;
if(dindex<0){
_side="left";
}else if(dindex>0){
_side="right";
}else{
_side="center";
}
_vpers=sys.photoWidth*Math.sin(sys.getPhotoAngle());
_hpers=Math.tan(sys.getPhotoAngle())*(sys.photoWidth-_vpers);
}
override public function createImage():void{
initPreloadVars();
initPosition();
try{
if(imageCon.getInfo()!=null){
preloadHolder=new PhotoPreloadHolder(this,"preloader");
imageCon.getInfo().addEventListener(Event.COMPLETE,imageReady);
imageCon.getInfo().addEventListener(ProgressEvent.PROGRESS,loadProgress);
imgCon=imageCon.create();
}else{
imgCon=imageCon.create();
imageReady(new Event(Event.COMPLETE));
}
}catch(e){
}
}
private function loadProgress(e:ProgressEvent):void{
}
private function initVars():void{
tween=new Easing(speed);
eff=new PhotoEffect(this);
eff.initPoints();
if(showReflect){
reflectEffect=new ReflectionEffect(this);
}
}
override protected function imageReady(e:Event):void{
resizeImage(imgCon,sys.resizeImage,sys.photoWidth,sys.photoHeight);
setImage(imgCon);
setPhotoSize(image.width,image.height);
this.y=sys.compHeight-image.height;
_vpers=image.width*Math.sin(sys.getPhotoAngle());
_hpers=Math.tan(sys.getPhotoAngle())*(image.width-vpers);
initVars();
if(reflectEffect!=null){
reflectEffect.initPoints();
}
addChild(image);
setEvent();
super.imageReady(e);
}
public function setEvent():void{
this.addEventListener(MouseEvent.MOUSE_DOWN,select);
}
private function select(e:MouseEvent):void{
if(!selected){
sys.setSelection(index);
sys.delayAutoFlip();
}
}
private function initPosition():void{
var dindex:int=index-sys.selectedIndex;
var numChild:int=parent.numChildren;
if(dindex<0){
initSide("left");
dindex=Math.abs(dindex)-1;
depth=sys.selectedIndex+1-dindex;
tx=sys.leftX-sys.distance-(dindex*sys.spacing)-sys.getPhotoAt(sys.selectedIndex-1).vWidth;
ts=1;
ty=sys.compHeight-photoHeight;
sys.itemsParent.addChildAt(this,depth);
}else if(dindex>0){
initSide("right");
dindex=Math.abs(dindex)-1;
depth=(parent.numChildren-1)-dindex;
tx=sys.rightX+getStackX();
ty=sys.compHeight-photoHeight;
ts=1;
sys.itemsParent.addChildAt(this,depth);
}else{
initSide("center");
depth=parent.numChildren;
tx=cx-(photoWidth*sys.selectedScale)/2;
ty=sys.selectedY+sys.compHeight-photoHeight;
ts=sys.selectedScale;
sys.addChild(this);
}
x=tx;
y=ty;
scaleX=scaleY=ts;
}
public function position(){
var dindex:int=index-sys.selectedIndex;
var numChild:int=parent.numChildren;
if(dindex<0){
side="left";
dindex=Math.abs(dindex)-1;
depth=sys.selectedIndex+1-dindex;
tx=sys.leftX-sys.distance-(dindex*sys.spacing)-sys.getPhotoAt(sys.selectedIndex-1).vWidth;
ty=sys.compHeight-photoHeight;
ts=1;
sys.itemsParent.addChildAt(this,depth);
}else if(dindex>0){
side="right";
dindex=Math.abs(dindex)-1;
depth=(parent.numChildren-1)-dindex;
tx=sys.rightX+getStackX();
ty=sys.compHeight-photoHeight;
ts=1;
sys.itemsParent.addChildAt(this,depth);
}else{
side="center";
depth=parent.numChildren;
tx=cx-(photoWidth*sys.selectedScale)/2;
ts=sys.selectedScale;
ty=sys.selectedY+sys.compHeight-photoHeight;
sys.addChild(this);
}
this.addEventListener(Event.ENTER_FRAME,motion);
}
private function motion(e:Event=null):void{
tx=Math.round(tx);
ty=Math.round(ty);
var nx:Number=tween.getNextValue(x,tx,false);
var ny:Number=tween.getNextValue(y,ty,false);
var ns:Number=tween.getNextValue(scaleX,ts,false,0.001);
x=nx;
y=ny;
scaleX=scaleY=ns;
if(tween.checkFinish(x,tx) && tween.checkFinish(y,ty) && tween.checkFinish(scaleX,ts)){
motionComplete();
}
}
private function motionComplete():void{
this.removeEventListener(Event.ENTER_FRAME,motion);
}
override public function get sys():*{
return PhotoFlow(super.sys);
}
override public function toString():String{
return "photo:"+index;
}
public function get cx():Number{
return sys.cx;
}
private function initSide(str:String):void{
if(eff!=null){
eff.transformTo(str);
}
if(reflectEffect!=null){
reflectEffect.transformTo(str);
}
_side=str;
}
public function get side():String{
return _side;
}
public function set side(str:String):void{
if(str!=_side){
eff.transform(str);
if(reflectEffect!=null){
reflectEffect.transform(str);
}
_side=str;
}
}
public function get photoWidth():Number{
var v:Number;
if(_photoWidth!=-1){
v=_photoWidth;
}else{
v=sys.photoWidth;
}
return v;
}
public function get photoHeight():Number{
return _photoHeight;
}
public function setPhotoSize(w:Number,h:Number):void{
_photoWidth=w;_photoHeight=h;
sys.positionPhotos();
}
public function get points():Points{
return eff.points;
}
public function get hpers():Number{
return _hpers;
}
public function get vpers():Number{
return _vpers;
}
public function get vWidth():Number{
return photoWidth-vpers;
}
public function getStackX():Number{
if(index!=sys.selectedIndex+1){
var pPhoto:Photo=sys.getPhotoAt(sys.selectedIndex+1);
return sys.distance+pPhoto.vWidth-vWidth+(sys.spacing*(index-sys.selectedIndex-1));
}else{
return sys.distance;
}
}
public function set speed(num):void{
tween.speed=num;
eff.speed=num;
if(reflectEffect!=null)
reflectEffect.speed=num;
}
public function get speed():Number{
return sys.speed;
}
public function get showReflect():Boolean{
return sys.showReflection;
}
public function get effect():PhotoEffect{
return eff;
}
}
}