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" );