BetweenAS3 이벤트 등록하기

BetweenAS3 — Tags: , , , — Siaa @ 4:50 pm

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;
	}
}

  • Share/Bookmark

4 Comments »

  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
    }, null, timeValue, Cubic.easeInOut);
    }

    private function removeTween():void
    {
    this.tween.stop();
    this.tween = null;
    }

    ** if (this.tween && this.tween.isPlaying) this.removeTween();
    이렇게 사용하면 편하더라구요. ^^

    Siaa Reply:

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

    Comment by YangGOON — 2009/10/15 @ 11:15 am
  2. 오우 감사합니다!

    Siaa Reply:

    와우~~^^
    찾아주셔서 감사합니다!!!

    Comment by 야호 — 2009/11/09 @ 3:13 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2010 blog.flasia.com | powered by WordPress with Barecity