HOMERSS 2.0RSS comments
sizeSMALLMEDIUMLARGEXTRA LARGE
home
time
24 / Sun
06 15 08 02 01
title AS3筆記-無知萬萬用
title
言
類
論
別

OOP物件導向程式開發,是以真實世界的運昨邏輯化的產物,學習OOP的過程中,常常可以用真實世界的想像去裡解,透過學習的過程,去了解世界運作以及人生的道理,這樣想像起來會比較有趣.(希望是會啦)

從我們呱呱墜地,對這地球一無所知,我們還是可以吃飯長大,不需要知道地球是圓的還是方的.
胃不用知道血液怎麼流,管好他自己的消化,以及餓得時候發出訊號就好了.
所以上帝在設計哺乳類動物的時候,也是用物件導向的方式 – 寫好的OOP程式也可以用這樣去想.

基本上,寫任何一個物件,首先要規劃的是以他自己的角度來想,不需要知道很多他能力以外的事

比方說做一個menu好了,他並不需要知道他按了以後會發生什麼事情,光以一個menu的角度來說, 他被按下去的時候.只要告訴其他的元件:”我被按了什麼“就好了.至於按了會發生什麼事情,是秀一張圖,還是秀一段字,或撥音樂?這都不需要規範在這個menu裡面.

這樣一來,這個menu就可以被重複使用,這也是我們寫成class的主要目的,可以重複的使用這個menu而不需要因為每次有不同的作用而去改裡面的程式.

所以當這個menu被按了以後,在這menu裡面用parent去寫他要幹麻是非常不OOP的,例如

menuItem.addEventListener(MouseEvent.CLICK,doClick);
.
.
.
private function doClick(evt:MouseEvent):void{
parent.parent.showImage(a);
}

當你把code寫成這樣,會造成這個menu的class只可以去叫他的parent.parent去秀執行秀某張 image的動作,以後如果要在別的案子要拿同一個menu class來作其他的事情,就不可以用了,或者是要改code,這樣一來這個menu的用途就會很侷限,而且每次要用他就要規範一個showImage的funciton 在他的parent.parent.非常不合實際.
(寫成這樣乾脆寫在 flash IDE裡面的frame上算了, 何必花時間寫成Class)

所以,最好的方法是

//定義property
public static const MENU_CLICKED:String=”menuClicked”
.
.

//以下這行應該也會在某個method裡面,為何要這樣寫?
menuItem.addEventListener(MouseEvent.CLICK,doClick);
.
.
.
private function doClick(evt:MouseEvent):void{
dispatchEvent(new Event(MENU_CLICKED);
}

然後在外面的別的地方,可能是他的parent寫

.
.
//以下兩行應該也會在某個method裡面

menu:Menu=new Menu();
menu.addEventListener(Menu.MENU_CLICKED,doSomething);
/*
or
addEventListener(Menu.MENU_CLICKED,doSomething,true);
(capture phase)
*/

.
.
.

function doSomething(evt:Event){
doWhatEverYouLike();
}

這樣一來,透過dispatchEvent,你的Menu就可以用來作很多不同的事情,因為doWhatEverYouLike()並不包含在menu的class裡面,放在外面你可以改他的作用,所以這個menu以後就可以來做很多不同的事情.

至於如果是在很多個parent以外要聽這個MENU_CLICKED,可以用capture phase,來聽,這樣就不會有Event要一層一層傳的麻煩.


  • 恩... 1 Stars喔~ 2 Stars好! 3 Stars酷!! 4 Stars哇!!! 5 Stars (5 票, 平均: 4.60 / 5) << 請踴躍投票


    Facebook comments:

    One Message to “AS3筆記-無知萬萬用”


    1. pei
      說:

      3Q!
      其實我之前看到
      private function doClick(evt:MouseEvent):void{
      dispatchEvent(new Event(MENU_CLICKED);
      }
      就會莫名其妙的感到害怕 但是這樣讀下來現在比較有信心使用了!

    Leave a Message

    :) D: :( :D more »