Upgrade to Pro — share decks privately, control downloads, hide ads and more …

There is something about Event

There is something about Event

flash, actionscript3, event

高見龍

June 26, 2012
Tweet

More Decks by 高見龍

Other Decks in Technology

Transcript

  1. 關於Event這回事
    高見見龍龍
    photo by Luke Peterson Photography
    there's something about Event

    View Slide

  2. a.k.a Eddie or Aquarianboy
    Live and work in Taipei, Taiwan.
    Serving in my own little tiny company.
    Flash / AS3 / Ruby / Rails / Python programming for living.
    Mac OS user, Objective-C for personal inerests.
    Technical Education and Consulant.
    PTT Flash BM (since 2007/4).
    Ruby Certified Programmer (Since 2012/1).
    Adobe Certified Flash Developer (Since 2006/7).
    Linux Professional Institue Certification (Since 2005/3).
    高見見龍龍
    photo by Eddie

    View Slide

  3. View Slide

  4. 源起
    why

    View Slide

  5. 如何與上(下)層的MC互動?
    how to interact with parent (or child) movieclips?

    View Slide

  6. 想知道哪個按鈕被按了?
    how to know which button was clicked?

    View Slide

  7. 為什麼swf讀不到網路資料?
    why swf file can not get the right response from the internet?

    View Slide

  8. 如何知道圖片已下載完成?
    how to know if image files were downloaded completly?

    View Slide

  9. 事件
    event

    View Slide

  10. btn.onRelease = function() {
    _root.hero_mc.gotoAndPlay(10);
    }

    View Slide

  11. mc.onRelease = function() {
    _parent._parent.mc.title_txt.text = "this is not good!";
    }

    View Slide

  12. 鬆綁
    loose coupling

    View Slide

  13. 聆聽
    listener

    View Slide

  14. listener只是個function
    listener is just a function

    View Slide

  15. function click_handler(e:MouseEvent):void {
    trace("hello, everyone!");
    }

    View Slide

  16. 註冊
    register

    View Slide

  17. addEventListener

    View Slide

  18. public function addEventListener(type:String, listener:Function,
    useCapture:Boolean = false, priority:int = 0,
    useWeakReference:Boolean = false):void

    View Slide

  19. mc.addEventListener(MouseEvent.CLICK, click_handler);

    View Slide

  20. 名稱
    event name

    View Slide

  21. public function addEventListener(type:String, listener:Function,
    useCapture:Boolean = false, priority:int = 0,
    useWeakReference:Boolean = false):void

    View Slide

  22. 事件名稱其實只是字串
    event name is actually just plain string

    View Slide

  23. trace(MouseEvent.CLICK);
    trace(IOErrorEvent.IO_ERROR);
    // "click"
    // "ioError"

    View Slide

  24. mc.addEventListener(MouseEvent.CLICK, click_handler);

    View Slide

  25. mc.addEventListener("click", click_handler);

    View Slide

  26. 移除
    remove

    View Slide

  27. mc.removeEventListener(MouseEvent.CLICK, click_handler);

    View Slide

  28. 沒用到的記得要收掉
    remember to remove useless listener

    View Slide

  29. 隨手做環保
    save the world!

    View Slide

  30. 流程
    flow

    View Slide

  31. 階段
    phases

    View Slide

  32. capture, bubble, and the target

    View Slide

  33. photo by Luke Peterson Photography

    View Slide

  34. reference: http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html

    View Slide

  35. 冒泡泡
    bubbling

    View Slide

  36. dispatchEvent(new Event(Event.COMPLETE, bubbles:Boolean,
    cancelable:Boolean));

    View Slide

  37. 捕捉
    capture

    View Slide

  38. public function addEventListener(type:String, listener:Function,
    useCapture:Boolean = false, priority:int = 0,
    useWeakReference:Boolean = false):void

    View Slide

  39. mc.addEventListener(MouseEvent.CLICK, click_handler, true);

    View Slide

  40. reference: http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html

    View Slide

  41. 參考
    reference

    View Slide

  42. addEventListener("click", function(e) { // code });

    View Slide

  43. public function addEventListener(type:String, listener:Function,
    useCapture:Boolean = false, priority:int = 0,
    useWeakReference:Boolean = false):void

    View Slide

  44. addEventListener("click", function(e) { // code }, false, 0, true);

    View Slide

  45. 順序
    Priority

    View Slide

  46. function handler_a(e:Event):void {
    trace("hello, A");
    }
    function handler_b(e:Event):void {
    trace("hello, B");
    }
    function handler_c(e:Event):void {
    trace("hello, C");
    }
    mc.addEventListener(MouseEvent.CLICK, handler_a);
    mc.addEventListener(MouseEvent.CLICK, handler_b);
    mc.addEventListener(MouseEvent.CLICK, handler_c);

    View Slide

  47. public function addEventListener(type:String, listener:Function,
    useCapture:Boolean = false, priority:int = 0,
    useWeakReference:Boolean = false):void

    View Slide

  48. mc.addEventListener(MouseEvent.CLICK, handler_a, false, 1);
    mc.addEventListener(MouseEvent.CLICK, handler_b, false, 3);
    mc.addEventListener(MouseEvent.CLICK, handler_c, false, 2);

    View Slide

  49. 目標
    the target

    View Slide

  50. target v.s. currentTarget

    View Slide

  51. 發布
    dispatch

    View Slide

  52. dispatchEvent(new MouseEvent(MouseEvent.CLICK));

    View Slide

  53. 客制化
    custom events

    View Slide

  54. package digik.events
    {
    import flash.events.Event;


    public class LotteryEvent extends Event {
    public static const REMOVE_BANNER:String = "remove the banner";
    public var dataObject:Object;



    public function LotteryEvent(type:String , dataObj:Object = null,
    bubbles:Boolean = true, cancelable:Boolean = false, ...rest):void {
    super(type, bubbles, cancelable);
    dataObject = dataObj;
    }



    override public function clone():Event {
    return new LotteryEvent(type, dataObject, bubbles, cancelable);
    }
    }
    }

    View Slide

  55. my_button.addEventListener(MouseEvent.CLICK, click_handler);
    function click_handler(e:MouseEvent):void {
    dispatchEvent(new LotteryEvent(LotteryEvent.REMOVE_BANNER, {id: 2});
    }

    View Slide

  56. addEventListener(LotteryEvent.REMOVE_BANNER, banner_removed);

    View Slide

  57. function banner_removed(e:LotteryEvent):void {
    trace(e.dataObject.id);
    var the_banner:Banner = this['banner_" + e.dataObject.id] as Banner;
    if (contains(the_banner)) {
    removeChild(the_banner);
    }
    }

    View Slide

  58. 小結
    conclusion

    View Slide

  59. addEventListener(MouseEvent.CLICK, click_handler);

    View Slide

  60. public function addEventListener(type:String, listener:Function,
    useCapture:Boolean = false, priority:int = 0,
    useWeakReference:Boolean = false):void

    View Slide

  61. reference: http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html

    View Slide

  62. 用完記得要收
    remember to remove useless listener

    View Slide

  63. public function Lottery():void {
    if (stage) init();
    else addEventListener(Event.ADDED_TO_STAGE, added_to_stage);
    }



    private function added_to_stage(e:Event):void {
    removeEventListener(Event.ADDED_TO_STAGE, added_to_stage);
    init();
    }
    private function init():void {
    // do something here
    }

    View Slide

  64. 訊號
    signal

    View Slide

  65. 結束
    end

    View Slide

  66. 高見見龍龍
    Conacts
    photo by Eddie
    Websie
    Blog
    Plurk
    Facebook
    Google Plus
    Twiter
    Email
    Mobile
    http://www.eddie.com.tw
    http://blog.eddie.com.tw
    http://www.plurk.com/aquarianboy
    http://www.facebook.com/eddiekao
    http://www.eddie.com.tw/+
    https://twiter.com/#!/eddiekao
    [email protected]
    +886-928-617-687

    View Slide