본문 바로가기

개발

EventManager 예제

1. 함수를 만들어 이벤트에 할당합니다.


import com.grotesq.as2.EventManager;

function goLink( ):Void {
	getURL( "http://www.grotesq.com", "_blank" );
}

EventManager.addEvent( button, "onRelease", goLink );




2. 복수의 함수를 이벤트에 할당합니다.


import com.grotesq.as2.EventManager;

function chaseX( ):Void {
	this._x += ( _root._xmouse - this._x ) * 0.05;
}
function chaseY( ):Void {
	this._y += ( _root._ymouse - this._y ) * 0.05;
}
function mouseInteraction( ):Void {
	if( this.hitTest( _root._xmouse, _root._ymouse ) ) {
		this._xscale = this._yscale += ( 170 - this._yscale ) * 0.1;
	}
	else {
		this._xscale = this._yscale += ( 100 - this._yscale ) * 0.1;
	}
}

EventManager.addEvent( _mc, "onEnterFrame", chaseX );
EventManager.addEvent( _mc, "onEnterFrame", chaseY );
EventManager.addEvent( _mc, "onEnterFrame", mouseInteraction );




3. 무비클립엔 알파와 스케일에 대한 이벤트가 복수로 할당되어 있습니다.
버튼을 클릭하면 이 중 알파에 대한 이벤트를 제거합니다.
리셋버튼을 누르면 초기화됩니다.



import com.grotesq.as2.EventManager;

mc._alpha = 50;

function addAlpha( ):Void {
	mc._alpha = 100;
}
function decAlpha( ):Void {
	mc._alpha = 50;
}
function addScale( ):Void {
	mc._xscale = mc._yscale = 150;
}
function decScale( ):Void {
	mc._xscale = mc._yscale = 100;
}
function remove( ):Void {
	EventManager.removeEvent( mc, "onRollOver", addAlpha );
	EventManager.removeEvent( mc, "onRollOut", decAlpha );
	mc._alpha = 100;
}
function reset( ):Void {
	EventManager.addEvent( mc, "onRollOver", addAlpha );
	EventManager.addEvent( mc, "onRollOut", decAlpha );
	mc._alpha = 50;
}

EventManager.addEvent( mc, "onRollOver", addAlpha );
EventManager.addEvent( mc, "onRollOut", decAlpha );
EventManager.addEvent( mc, "onRollOver", addScale );
EventManager.addEvent( mc, "onRollOut", decScale );
EventManager.addEvent( removeBtn, "onRelease", remove );
EventManager.addEvent( resetBtn, "onRelease", reset );



4. 매개 변수를 입력받는 함수를 이벤트에 할당합니다.
addEvent 함수의 네번째 String과 다섯번째 String이 함수의 1, 2번째 String으로 활용됩니다.



import com.grotesq.as2.EventManager;

function link( path:String, target:String ):Void {
	getURL( path, target );
}

EventManager.addEvent( linkBtn, "onRelease", link, "http://www.grotesq.com", "_blank" );



5. 4번 예제의 활용편
미리 만들어 놓은 배열의 값을 for문에서 한번에 함수로 전달해서 코드를 단순화합니다.


import com.grotesq.as2.EventManager;

var paths:Array = new Array();
paths[0] = "http://www.google.co.kr";
paths[1] = "http://www.daum.net";
paths[2] = "http://www.grotesq.com";
paths[3] = "http://www.flas.kr";

function link( path:String ):Void {
	getURL( path, "_blank" );
}

for( var i:Number = 0; i < 4; i++ ) {
	EventManager.addEvent( this["linkBtn"+i], "onRelease", link, paths[i] );
}




6. 버튼을 누를 때 마다 onEnterFrame 이벤트 안의 함수를 검사하고,
함수가 존재하면 제거하고 존재하지 않으면 추가하는 토글동작을 합니다.


import com.grotesq.as2.EventManager;

function chaseX( event:Object ):Void {
	this._x += ( _root._xmouse - this._x ) * 0.1;
}
function chaseY( event:Object ):Void {
	this._y += ( _root._ymouse - this._y ) * 0.1;
}
function toggleX():Void {
	var has:Boolean = EventManager.hasEventAndFunction( circle, "onEnterFrame", chaseX );
	if( has )	EventManager.removeEvent( circle, "onEnterFrame", chaseX );
	else		EventManager.addEvent( circle, "onEnterFrame", chaseX );
}
function toggleY():Void {
	var has:Boolean = EventManager.hasEventAndFunction( circle, "onEnterFrame", chaseY );
	if( has )	EventManager.removeEvent( circle, "onEnterFrame", chaseY );
	else		EventManager.addEvent( circle, "onEnterFrame", chaseY );
}

EventManager.addEvent( circle, "onEnterFrame", chaseX );
EventManager.addEvent( circle, "onEnterFrame", chaseY );
EventManager.addEvent( x_btn, "onRelease", toggleX );
EventManager.addEvent( y_btn, "onRelease", toggleY );




7. setInterval로 함수가 시간 주기를 가지고 실행되고,
실행될 때 마다 등록된 이벤트를 발생(dispatch)시킵니다.


import com.grotesq.as2.EventManager;
import mx.transitions.Tween;
import mx.transitions.easing.*;

var _this:MovieClip = this;
var n:Number = 0;

function over( ):Void {
	new Tween( this, "_xscale", Strong.easeOut, this._xscale, 150, 30 );
	new Tween( this, "_yscale", Strong.easeOut, this._yscale, 150, 30 );
}
function out( ):Void {
	new Tween( this, "_xscale", Strong.easeOut, this._xscale, 100, 30 );
	new Tween( this, "_yscale", Strong.easeOut, this._yscale, 100, 30 );
}
function roll( ):Void {
	EventManager.dispatchEvent( _this["mc"+( n%3 )], "onRollOut" );
	EventManager.dispatchEvent( _this["mc"+( ++n%3 )], "onRollOver" );
}

for( var i:Number = 0; i < 3; i++ ) {
	EventManager.addEvent( this["mc"+i], "onRollOver", over );
	EventManager.addEvent( this["mc"+i], "onRollOut", out );
}

setInterval( roll, 2000 );
EventManager.dispatchEvent( mc0, "onRollOver" );