幻灯片:循环播放图片

/*
	先载入所有图片及标签,然后通过设置图片的深度来显示相应的图片(并非点击标签后再载入相应图片,因为这种幻灯片一般图片比较少)
*/
package {
	import flash.display.Sprite;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.utils.Timer;
	import flash.events.TimerEvent;

	public class Main extends Sprite {
		var xmlURL:String="pict.xml";
		var xml:XML;
		var len:int;
		var arr_picURL:Array;//图片路径

		var arr_pic:Array;//存储图片的数组
		var arr_label:Array;//存储标签的数组

		var picSprite:Sprite;//装图片的容器,定义这个容器的目的是:方便直接设置标签处于所有图片的上方
		var labelSprite:Sprite;//装标签的容器

		var oldLabel:PhotoLabel;
		
		var timer:Timer;
		var currentIndex:int;//当前显示图片的索引号

		var counter:int;//作用:当所有图片载入完成后,将第一张图片设为默认显示图片(将其深度设为8)

		public function Main():void {
			picSprite=new Sprite  ;
			showArea.addChild(picSprite);
			picSprite.x=10;
			picSprite.y=10;

			labelSprite=new Sprite  ;
			showArea.addChild(labelSprite);
			labelSprite.x=20;
			labelSprite.y=230;

			init();
		}

		private function init():void {
			loadXML(xmlURL);
		}
		
		//---------------------------------------------------------------------------------@载入XML
		private function loadXML(url:String):void {
			var xmlLoader:URLLoader=new URLLoader  ;
			xmlLoader.load(new URLRequest(url));
			xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded,false,0,true);
		}

		private function xmlLoaded(e:Event):void {
			xml=XML(e.currentTarget.data);
			len=xml.pict.length();
			arr_picURL=[];
			arr_pic=[];
			arr_label=[];

			for (var i:int=0; i<len; i++) {
				var url:String=xml.pict[i].url;
				arr_picURL[i]=url;
			}

			loadLabel();
			loadPic();

			timer=new Timer(2000,0);
			timer.addEventListener(TimerEvent.TIMER,loopPic,false,0,true);
			timer.start();
		}
		
		//---------------------------------------------------------------------------------@载入标签
		private function loadLabel():void {
			for (var i:int=0; i<len; i++) {
				var photoLabel:PhotoLabel=new PhotoLabel(String(i));
				photoLabel.name=String(i);
				labelSprite.addChild(photoLabel);
				arr_label.push(photoLabel);
				photoLabel.x=(photoLabel.width+8)*i;

				photoLabel.addEventListener(MouseEvent.MOUSE_OVER,photoLabelMouseOver,false,0,true);
				photoLabel.addEventListener(MouseEvent.MOUSE_OUT,photoLabelMouseOut,false,0,true);
				photoLabel.addEventListener(MouseEvent.CLICK,photoLabelClick,false,0,true);
			}
		}

		private function photoLabelMouseOver(e:MouseEvent):void {
			var photoLabel:PhotoLabel=e.currentTarget as PhotoLabel;
			if (! photoLabel.clicked) {
				photoLabel.scaleX=1.2;
				photoLabel.scaleY=1.2;
			}
		}
		private function photoLabelMouseOut(e:MouseEvent):void {
			var photoLabel:PhotoLabel=e.currentTarget as PhotoLabel;
			if (! photoLabel.clicked) {
				photoLabel.scaleX=1;
				photoLabel.scaleY=1;
			}
		}
		private function photoLabelClick(e:MouseEvent):void {
			var photoLabel:PhotoLabel=e.currentTarget as PhotoLabel;
			var index:int=int(photoLabel.name);
			currentIndex=index;//加这句代码的目的是:当点击标签后,循环播放的是接下来的标签对应的图片
			if (photoLabel!=oldLabel) {
				photoLabel.clicked=true;
				showPic(index);
			}
		}
		//此段是核心
		private function showPic(index:int):void {
			var photoLabel:PhotoLabel=arr_label[index];
			if (oldLabel) {
				oldLabel.scaleX=1;
				oldLabel.scaleY=1;
				oldLabel.clicked=false;
			}			
			photoLabel.scaleX=1.4;
			photoLabel.scaleY=1.4;
			oldLabel=photoLabel;
			picSprite.setChildIndex(arr_pic[index],8);
		}
		
		//---------------------------------------------------------------------------------@载入图片
		private function loadPic():void {
			for (var i:int=0; i<len; i++) {
				var picLoader:Loader=new Loader  ;
				var picURL:String=arr_picURL[i];
				picSprite.addChild(picLoader);
				//picLoader.x=15*i;
				//picLoader.y=15*i;
				arr_pic.push(picLoader);
				picLoader.load(new URLRequest(picURL));
				picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,picLoaded,false,0,true);
			}
		}
		private function picLoaded(e:Event):void {
			counter++;
			var pic:Loader=e.currentTarget.loader;
			pic.width=400;
			pic.height=250;

			if (counter==9) {
				showPic(0);
			}
		}
		//---------------------------------------------------------------------------------@循环播放图片
		private function loopPic(e:TimerEvent):void {
			currentIndex++;
			if(currentIndex==len){
				currentIndex=0;
			}
			showPic(currentIndex);
		}
	}
}

原文地址:https://www.cnblogs.com/leon3286/p/1790675.html