建立Flash CS3元件 四 編寫元件類

2021-06-09 19:52:00 字數 2797 閱讀 1481

建立flash cs3元件(四) 編寫元件類

在上一講,我們已經決定好的元件的外觀與樣式,現在,我們要做的是規劃元件類.

使用者設定元件,靠得就是元件的方法與屬性,乙個元件應當有什麼屬性,什麼方法,這也是乙個需要仔細規劃的方面,規劃的原則當然也是以需求為先.

1.accordion元件的屬性

(1)首先,我們希望使用者可以通過乙個屬性統一設定元件的子項,這個屬性就是資料提供者,一般命名為dataprovider,這個屬性應該是乙個陣列,陣列的每個項都是乙個物件.由於我們希望使用者可以自定義圖示,所以這個物件需要有label,icon,data三個屬性,分別代表標題按鈕的標籤,圖示和對應的顯示物件.而我們還想使用元資料中的collection 標籤來方便使用者,於是,我們仿照fl.data.dataprovider類建立乙個自己的類:com.cyjb.data.childrenprovider,並建立了乙個對應的item類:com.cyjb.data.childrenprovideritem.對於這兩個類,我不做過多介紹,具體的可以自己看類**,有很詳細的注釋.

(2)其次,我們希望使用者可以檢索新增的子項個數,於是我們需要乙個length屬性.

(3)使用者當然希望知道元件的那個子項被選擇了,而且可能會想與被選擇的子項進行互動,所以我們要新增兩個屬性:selectedindex和content,分別是選擇的索引和對子項的引用.

2.accordion元件的方法

accordion元件的方法比較簡單,肯定都是用來新增或刪除子項的,所以只定義八個方法:

additem(item:object):void

additemat(item:object,index:uint):void

getitemat(index:uint):object

removeitemat(index:uint):object

removeitem(item:object):object

removeall():void

replaceitem(newitem:object,olditem:object):object

replaceitemat(newitem:object,index:uint):object

當然,方法看起來多,但是實現起來都很簡單.我們根據dataprovider屬性的改變來更改子項,所以只要把上面八個方法直接連線到childrenprovider類的相應方法中去就可以了.

3.accordion元件應該如何工作

我們用labelbutton作為標題欄按鈕,然後將所有標題欄按鈕都放在乙個sprite中,將匯入的子項放在另乙個sprite中,並利用scrollrect來設定遮罩.

因為當childrenprovider類發生更改時會廣播datachange事件,所以我們監聽這個事件,並呼叫invalidate(invalidationtype.data),使元件在下一次重新整理時一起繪製,以節約資源.

4.真正開始編寫accordion類

(1)編寫類的大致框架

首先,我們把已經規劃好的部分搭建成乙個類框架,然後再把真正的**一點點的嵌入這個框架中.

完成了的類框架

(2)元件的建構函式

在這裡,我們要初始化所有變數

public function accordion():void}

(3)configui函式

override protected function configui():void

(4)draw函式

這裡是元件的核心,需要詳細說明.

我們的元件可能發生重繪的部分是szie,styles,data,selected

當szie和hederheight,contectpadding樣式發生改變時,我們需要重新排列所有的內容.

當styles發生改變時,我們會重新繪製所有標題按鈕和重繪背景.

當data發生改變時得刪掉多餘的標題按鈕並且新建更新的標題按鈕,在這裡僅僅使用一種很簡單的演算法,雖然它比較浪費記憶體,但是我們的目的是學習元件類的編寫.

當selected發生改變時,也是重新排列標題按鈕的位置,我們會把它與szie一同考慮.

override protected function draw():void

}if (isinvalid(invalidationtype.data))

if (isinvalid(invalidationtype.size,invalidationtype.selected,invalidationtype.data))

super.draw();

}在元件類的書寫中,在任何情況下使用invalidate()而不是直接呼叫方法都是乙個好習慣,invalidate()方法可以盡可能的幫助你減少資源浪費.

在draw中,判斷invalidationtype是有順序的,盡量使工作不會重複進行.例如,在accordion中,drawheader()會設定標題按鈕的style,而updateheaderstyles()做的是同樣的工作,於是我們就先判斷invalidationtype.styles,減少浪費.

其次,是將專門幹某一項工作的一些**封裝成方法,這樣不但是**易於理解,還會方便修改.而且,如果要作為基類擴充套件的話,會大大減少子類的工作量.

還有,無論如何,更改樣式都是乙個相當浪費的事,所以盡可能的減少對style的更改.但是,如果想減少對style的更改,就需要在draw中做更多判斷,反而不利於閱讀和執行效率,這是乙個矛盾,需要仔細考慮.

(5)其它方法

對於其它的方法就不做特別的說明了,大家可以自己看類**.

基本完成的元件

到目前為止,元件幾乎已經完成了,但是,還缺少很重要的一點,也是只有元件才具有的一點特性:實時預覽.

在下一節,我會詳細的說明該如何製作乙個完美的實時預覽.

flash cs 3元件學習筆記

flash cs 元件其實跟 flash 8 的元件用法差不多,但是省去了很多監聽的一些繁瑣的東西,上次把 flash 8 的元件都看了一次 發現還有一些元件還是不錯的,但是開始學 flash cs 的元件的確說實話,記得東西還是有的,我把其中幾個公共的地方都做了一些筆記,當作是學習拉。combox...

關於Flash CS3建立Sprite型別的問題

來自 2007年五月7日 前幾天剛用上flash cs3的時候有過關於cs3建立symbol時沒有sprite型別的疑問,剛才在kirupa看到aw問到了這個問題,看了senocular的回答才明白,如果想建立sprite的話在bass class中指定為flash.display.sprite就行...

修改flash cs4元件tileList的樣式

以前多用flex的元件進行開發,今天用到了flash 中的元件,由於預設的樣式並不能讓我滿意 特別是中文字小於12px,就十分模糊看不清楚了 所以需要對flash中的元件的樣式進行修改 package tlc.additem tlc.additem tlc.additem tlc.additem t...