[원문] - http://www.flash8coders.com/zbxe/?mid=as30&document_srl=86410
BatchCode 를 3.0으로 포팅하는데 생각처럼 만만치가 않네요.
여기저기 물어보고 겁나게 삽질했습니다.
코드는 다소 바뀌었지만, 다행이 사용법은 2.0버젼이랑 동일하게 유지할 수 있었네요.
예제도 거의 같아요.
실행코드는 첨부파일이고 인터페이스 파일은 없습니다. 달랑 하나입니다.
이 데모의 소스는 다음과 같습니다. 2.0버젼이랑 거의 달라진게 없습니다.
package
{
import com.greensock.easing.Bounce;
import com.greensock.TweenLite;
import flash.net.URLRequest;
import flash.text.TextFieldAutoSize;
import flash.text.TextField;
import clickage.common.util.BatchCode;
import clickage.common.util.ImageTransform;
import flash.events.Event;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.MouseEvent;
import fl.controls.Button;
/** comment :
* For example
*
* <pre>
*
*
*
* </pre>
*
* @author Cheol-Jin Eom
* @date 2010. 5. 19.
* @see
*
* ************************************** */
public class ViewManager
{
private var main:Main;
private var sptMain:Sprite;
private var sptImageContainer:Sprite;
private var sptFieldContainer:Sprite;
private var loader:Loader;
private var URI_IMAGE:String = "http://www.flash8coders.com/images/img3.jpg";
public function ViewManager(main:Main)
{
this.main = main;
}
public function start():void
{
buildViews();
}
private function buildViews():void
{
var btn:Button = main.getChildByName("btn") as Button;
btn.addEventListener(MouseEvent.CLICK, clickHandler);
sptMain = new Sprite();
main.addChild(sptMain);
sptImageContainer = new Sprite();
sptMain.addChild(sptImageContainer);
sptFieldContainer = new Sprite();
sptMain.addChild(sptFieldContainer);
loader = new Loader();
sptImageContainer.addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handler_loaded_image);
}
private function clickHandler(event:MouseEvent):void
{
// 초기화
loader.unload();
loader.x = 0;
if (sptFieldContainer.numChildren != 0) {
sptFieldContainer.removeChildAt(0);
}
// 배치실행 시작
excuteLinearProcess();
}
private function excuteLinearProcess():void
{
var batch:BatchCode = BatchCode.getInstance();
batch.clearBatch(); // 안해도 되는데 걍 클리어해줬음, 시작할때가 아니라 마지막에 해도 괜찮을 듯
batch.onExcuteListener = function () {
batch.next();
};
batch.addBatch(this, this.loadImage, [URI_IMAGE]); // 1. 이미지를 로드하고, 이미지 로드가 완료되면
batch.addBatch(this, this.resizeOriginalRatio, [400, 400]); //2. 이미지의 사이즈를 조정하고
batch.addBatch(this, this.moveTo, [200]); // 3. 오른쪽으로 이동하는 트윈을, 트윈이 끝나면
batch.addBatch(this, this.addTitle, ["이미지 이동 완료"]); // 4. 완료가 됐다는 메시지를 찍어본다.
batch.addBatch(this, this.moveTextClip, [0, 10]); // 5. 이렇게 찍힌 텍스트클립을 좌상단으로 이동해본다.
batch.excuteBatch();
}
public function loadImage(uri:String):void
{
loader.load(new URLRequest(uri));
}
private function handler_loaded_image(event:Event):void
{
BatchCode.getInstance().onExcuteListener();
}
public function resizeOriginalRatio(boundWidth:Number, boundHeight:Number):void
{
ImageTransform.transformToOriginalRatio(boundWidth, boundHeight, loader);
BatchCode.getInstance().onExcuteListener();
}
public function moveTo(pos:Number):void
{
TweenLite.to(loader, 1, {x:pos, ease:Bounce.easeOut, onComplete:handler_complete_move});
}
private function handler_complete_move():void
{
BatchCode.getInstance().onExcuteListener();
}
private function addTitle(msg:String):void
{
var field:TextField = new TextField();
field.name = "field";
field.text = msg;
field.x = 0;
field.y = 0;
field.autoSize = TextFieldAutoSize.LEFT;
field.text = msg;
sptFieldContainer.addChild(field);
sptFieldContainer.x = 300;
sptFieldContainer.y = 350;
BatchCode.getInstance().onExcuteListener();
}
private function moveTextClip(x:Number, y:Number):void
{
TweenLite.to(sptFieldContainer, 1, {x:x, y:y, ease:Bounce.easeOut});
BatchCode.getInstance().onExcuteListener();
}
}
}
- Posted
- Filed under Action Script