ActionScript/LoaderMax2011.01.31 10:21

TweenMax의 개발자인 필명 GreenSock 님이 LoaderMax라는 로더 클래스도 제공해주고 있죠.
(참고 : 2011/01/26 - [ActionScript/TweenMax] - TweenMax API Documentation )

LoaderMax를 이용하여 XML, Image, MP3, SWF, Video등
로드 가능한 파일들을 사용하기 편하게 제공해 주는 클래스입니다.

GreenSock님 블로그를 가면 사용법에 관한 예제도 있습니다만, 직접 사용해 보지 않는다면 상황에 따라 대처하기 힘들겠죠..

아래 소스는 XML을 파싱한 후 XML의 URL을 이용해 이미지를 로드하는 소스입니다.
소스 참고하실 분은 참고하시라고 남깁니다.

imageComplete 부분을 보시면 
   var thumbnails:Array = LoaderMax.getContent("mainQueue");
   var thumb:ContentDisplay;

부분이 있습니다. LoaderMax.getContent(로더의 이름) 와 같이 로더의 이름을 이용해 컨테츠를 받아서 쓸 수도 있고
배열 형태로 담아서 쓸 수도 있네요.

또, ContentDisplay 는 Sprite를 상속 받는 객체더군요. Bitmap일꺼라 생각했는데 아니었습니다.
왜 굳이 ContentDisplay라는 객체를 만들었을까 봤더니..
역시나 개발자를 편하게 해주기 위해서군요~으허허

thumb.centerRegistration = true;
이미지를 로드하고 Sprite와 같은 객체에 add해서 사용할때 느꼈던 불편중 하나가 중심좌표가 좌측상단이라는것..
중심좌표를 가로,세로 중간에 위치시킬때.. 계산값이 별거 없긴하지만 귀찮긴 했었는데,
위와 같이 속성 값을 한줄만 써주면 중심좌표를 정중앙으로 이동시킬 수 있네요.
그밖에 crop, fitWidth, fitHeight, bgColor 등 속성값들을 제공하는군요.

어여 로드 제어하는 부분을 좀 더 써봐야겠습니다. 수고하세용~

package
{
	import com.greensock.TweenMax;
	import com.greensock.easing.*;
	import com.greensock.events.LoaderEvent;
	import com.greensock.loading.ImageLoader;
	import com.greensock.loading.LoaderMax;
	import com.greensock.loading.XMLLoader;
	import com.greensock.loading.display.ContentDisplay;
	//import com.molgga.filters.Filter;
	
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.MouseEvent;
	
	
	[SWF (width="1000" , height="400" , backgroundColor="0x333333" , frameRate="60")]
	public class MaxLoader extends Sprite
	{
		private var WIDTH:uint;
		private var HEIGHT:uint;
		
		public function MaxLoader()
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			WIDTH = stage.stageWidth;
			HEIGHT = stage.stageHeight;
			
			var preLoader:Sprite = new Sprite();
			with(preLoader){
				graphics.beginFill(0xffffff);
				graphics.drawRect(0,0,WIDTH,4);
				graphics.endFill();
				y = HEIGHT/2 - height/2;
				scaleX = 0;
			}
			preLoader.name = "preLoader";
			preLoader.visible = false;
			addChild(preLoader);
			
			var xmlPath:String = "http://molgga.com/xmlData/portfolio.xml";
			
			var queue:LoaderMax = new LoaderMax({onProgress:loadProgress , onComplete:loadComplete});
			queue.append(new XMLLoader(xmlPath , {name:"xmlLoader" }));
			
			queue.load();
		}
		private function loadProgress(evt:LoaderEvent):void
		{
			trace(evt.target.progress);
		}
		private function loadComplete(evt:LoaderEvent):void
		{
			var xmlData:XML;
			try{
				xmlData = new XML(LoaderMax.getContent("xmlLoader"));
				
				var queue:LoaderMax = new LoaderMax({
					name:"mainQueue" , 
					onOpen:imageOpen,
					onProgress:imageProgress, 
					onComplete:imageComplete
				});
				for(var node:uint = 0 ; node < xmlData.item.length() ; node++){
					var imgPath:String = "http://molgga.com/" + xmlData.item[node].thumnail;
					queue.append(new ImageLoader(imgPath));
				}
				queue.load();
				
			}catch(e:TypeError){
				trace("XML type error");
			}
		}
		private function imageOpen(evt:LoaderEvent):void
		{
			var preLoader:Sprite = getChildByName("preLoader") as Sprite;
			preLoader.visible = true;
		}
		private function imageProgress(evt:LoaderEvent):void
		{
			var preLoader:Sprite = getChildByName("preLoader") as Sprite;
			preLoader.scaleX = evt.target.progress;
//			trace(evt.target.progress);
		}
		private function imageComplete(evt:LoaderEvent):void
		{
			var preLoader:Sprite = getChildByName("preLoader") as Sprite;
			
			TweenMax.to(preLoader, 1 , {delay:0, alpha:0, onComplete:function(){ removeChild(preLoader); }});
			
			var row:uint = 0;
			var column:uint = 0;
			var xPos:uint = 0;
			var thumbnails:Array = LoaderMax.getContent("mainQueue");
			var thumb:ContentDisplay;
			
			for(var node:uint = 0 ; node < thumbnails.length ; node++){
				xPos = column* 110 + 150;
				if(xPos+160 > WIDTH){
					row++;
					column = 0;
					xPos = column* 110 + 150;
				}
				column++;
				
				thumb = thumbnails[node];
				thumb.centerRegistration = true;
				thumb.width = 100;
				thumb.height = 80;
				thumb.x = xPos;
				thumb.y = row*90+150;
				thumb.alpha = 0;
				
				Filter.grayScale(thumb , true);
				
				TweenMax.to(thumb , 1 , {delay:node/10+1 , alpha:1 , y:thumb.y-50 , ease:Back.easeOut });
				
				thumb.addEventListener(MouseEvent.MOUSE_OVER , thumbOver);
				thumb.addEventListener(MouseEvent.MOUSE_OUT , thumbOut);
				
				addChild(thumb);
			}
		}
		private function thumbOver(evt:MouseEvent):void
		{
			//Filter.grayScale(evt.currentTarget , false);
		}
		private function thumbOut(evt:MouseEvent):void
		{
			//Filter.grayScale(evt.currentTarget , true);
		}
	}
}
저작자 표시 비영리 변경 금지
신고
Posted by 돼냥이

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:14 [ ADDR : EDIT/ DEL : REPLY ]
  3. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:17 [ ADDR : EDIT/ DEL : REPLY ]
  4. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:20 [ ADDR : EDIT/ DEL : REPLY ]
  5. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:21 [ ADDR : EDIT/ DEL : REPLY ]
  6. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:24 [ ADDR : EDIT/ DEL : REPLY ]
  7. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:27 [ ADDR : EDIT/ DEL : REPLY ]
  8. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:34 [ ADDR : EDIT/ DEL : REPLY ]
  9. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:41 [ ADDR : EDIT/ DEL : REPLY ]
  10. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:44 [ ADDR : EDIT/ DEL : REPLY ]
  11. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:51 [ ADDR : EDIT/ DEL : REPLY ]
  12. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 04:58 [ ADDR : EDIT/ DEL : REPLY ]
  13. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:00 [ ADDR : EDIT/ DEL : REPLY ]
  14. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:05 [ ADDR : EDIT/ DEL : REPLY ]
  15. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:06 [ ADDR : EDIT/ DEL : REPLY ]
  16. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:17 [ ADDR : EDIT/ DEL : REPLY ]
  17. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:19 [ ADDR : EDIT/ DEL : REPLY ]
  18. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:31 [ ADDR : EDIT/ DEL : REPLY ]
  19. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:35 [ ADDR : EDIT/ DEL : REPLY ]
  20. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:38 [ ADDR : EDIT/ DEL : REPLY ]
  21. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.10.16 10:45 [ ADDR : EDIT/ DEL : REPLY ]


티스토리 툴바