- 2009-10-12 (Mon) 16:50
- BetweenAS3
BetweenAS3에서도 이벤트를 등록하고 해당 이벤트가 발생하였을 때 함수를 호출할 수 있습니다.
이벤트를 등록해서 해당 이벤트 발생 시 함수를 호출하는 방법에는 두 가지가 있는데,
먼저 “이벤트 리스너 객체를 등록해서 사용하는 방법”입니다.
// tween이 종료될 때 이벤트 발생
var t:ITween = BetweenAS3.to(box, {x:280}, 1.5, Bounce.easeOut);
t.addEventListener(TweenEvent.COMPLETE, hnTweenComplete);
t.play();
private function hnTweenComplete(e:TweenEvent):void
{
trace("TweenComplete");
}
COMPLETE – tween이 종료되었을 때 이벤트 발생.
PLAY – tween이 시작되었을 때 이벤트 발생.
STOP – tween이 정지되었을 때 이벤트 발생.
UPDATE – tween이 진행되고 있는 동안 이벤트 발생.
아래는 “BetweenAS3의 메서드를 이용하는 방법”입니다.
이 방법의 이점은 변수를 배열의 형태로 전달할 수 있습니다.
// tween이 종료될 때 이벤트 발생(변수전달 가능)
var t:ITween = BetweenAS3.to(box, {x:280}, 1.5, Bounce.easeOut);
t.onComplete = hnTweenComplete;
t.onCompleteParams = ["param1", "param2"];
t.play();
private function hnTweenComplete(_param1:String, _param2:String):void
{
trace(_param1, _param2);
}
onComplete – tween이 종료되었을 때 이벤트 발생.
onCompleteParams – onComplete 메서드에서 지정한 함수로 넘겨줄 변수.
onPlay – tween이 시작되었을 때 이벤트 발생.
onPlayParams – onPlay 메서드에서 지정한 함수로 넘겨줄 변수.
onStop – tween이 정지되었을 때 이벤트 발생.
onStopParams – onStop 메서드에서 지정한 함수로 넘겨줄 변수.
onUpdate – tween이 진행되고 있는 동안 이벤트 발생.
onUpdateParams – onUpdate 메서드에서 지정한 함수로 넘겨줄 변수.
YangGOON님께서 코멘트로 좋은 정보를 알려주셨기에 내용을 좀 더 추가해 봅니다.
아래는 스테이지를 클릭하면 작은 사각형 박스가 지정한 위치로 트윈되는 무비입니다.
하지만, 스테이지를 연속으로 클릭하면 트윈이 좀 엉성하게 재생되는 것을 볼 수 있습니다.
스테이지를 클릭할 때마다 activeMotion()함수를 호출하기 때문인데요.
YangGOON님께서 알려주신 코드가 이럴 때 유용하게 사용될 것 같네요.
public class BetweenAS3Test extends Sprite {
private var tween:ITween;
private var box:Sprite;
public function BetweenAS3Test():void {
box = new Sprite();
box.graphics.beginFill(0x666666, 1);
box.graphics.drawRect(-10, -10, 20, 20);
box.graphics.endFill();
box.x = box.y = 20;
addChild(box);
stage.addEventListener(MouseEvent.CLICK, hnClick);
}
private function hnClick(e:MouseEvent):void {
trace("hnClick");
activeMotion(box, 480, 80, 1);
}
private function activeMotion(target:Object, xPos:int, yPos:int, timeValue:Number):void {
this.tween = BetweenAS3.tween(target, { x:xPos, y:yPos }, { x:20, y:20 }, timeValue, Cubic.easeInOut);
this.tween.play();
}
}
위 코드에 YangGOON님께서 알려주신 코드를 추가해 보았습니다.
activeMotion()함수가 호출될 때 지금 트윈이 재생 중인지를 체크 후 재생 중이라면 removeTween()함수를 호출합니다.
이렇게 되면 스테이지를 연속으로 클릭해도 클릭할 때마다 트윈을 처음부터 재생해 줍니다.
조금 응용한다면 트윈이 재생 중일 경우 마우스 이벤트를 막아두는 것도 방법이 되겠네요~~
public class BetweenAS3Test extends Sprite {
private var tween:ITween;
private var box:Sprite;
public function BetweenAS3Test():void {
box = new Sprite();
box.graphics.beginFill(0x666666, 1);
box.graphics.drawRect(-10, -10, 20, 20);
box.graphics.endFill();
box.x = box.y = 20;
addChild(box);
stage.addEventListener(MouseEvent.CLICK, hnClick);
}
private function hnClick(e:MouseEvent):void {
trace("hnClick");
activeMotion(box, 480, 80, 1);
}
private function activeMotion(target:Object, xPos:int, yPos:int, timeValue:Number):void {
if (this.tween && this.tween.isPlaying) this.removeTween();
this.tween = BetweenAS3.tween(target, { x:xPos, y:yPos }, { x:20, y:20 }, timeValue, Cubic.easeInOut);
this.tween.play();
}
private function removeTween():void {
trace("removeTween");
this.tween.stop();
this.tween = null;
}
}
- Newer: BetweenAS3 트윈을 그룹으로 만들어 제어하기
- Older: Flash CS5로 iPhone용 어플리케이션 개발 가능
Comments:2
- YangGOON 09-10-15 (Thu) 11:15
-
좋은 정보 감사합니다.
몇가지 추가로 적어 봅니다.
트윈이 끈나기 전에 이벤트가 발생시 연결되는 부분에 관한 이야기 인데요. 물론 아시리라 생각되지만 ^^;private function activeMotion(target:Object, xPos:int, yPos:int, timeValue:Number):void
{
if (this.tween && this.tween.isPlaying) this.removeTween();this.tween = BetweenAS3.tween(target,
{
x:xPos,
y:yPos
}, null, timeValue, Cubic.easeInOut);
}private function removeTween():void
{
this.tween.stop();
this.tween = null;
}** if (this.tween && this.tween.isPlaying) this.removeTween();
이렇게 사용하면 편하더라구요. ^^ - 야호 09-11-09 (Mon) 15:13
-
오우 감사합니다!
Trackbacks:0
- Trackback URL for this entry
- http://blog.flasia.com/archives/1271/trackback
- Listed below are links to weblogs that reference
- BetweenAS3 이벤트 등록하기 from blog.flasia.com

Siaa Reply:
October 15th, 2009 at 2:22 pm
오옷, 이런 방법이… 모르고 있었습니다.
이렇게 누추한 블로그를 찾아주신것도 감사한데… 유용한 정보까지 알려주시다니, 정말 감사드립니다!!!
블로그에 위 내용을 추가했습니다~
그럼, 좋은 하루 되세요^^