- 取得橡皮擦(游標改為橡皮擦圖示)
- 移動橡皮擦到想要擦掉的圖形上面(碰撞檢查)
- 按下滑鼠清除該圖形(刪除該圖形資料)
但是只要在資料部分必須事先規劃,其實只要每個圖形分散在不同的MovieClip上,我們就可以利用原本基本的原理來處理圖形的刪減了,我們只要在新增每一個圖形的時候,都各自用一個獨立的MovieClip將它包起來,並且集中存放在Array中,當需要檢查碰撞的時候,在用迴圈的方式檢查Array中哪個MovieClip有符合,只要單獨刪除該筆MovieClip,就可以滿足橡皮擦的功能了。

on (load) {
// 設定選單高度為28
this.setStyle ("headerHeight", 28);
// 設定第一個選單內容為NoteTab MovieClip,標題不顯示文字只採用tab1圖示
var tab1 = this.createChild("NoteTab", "tab1", {label:'', icon:"tab1"});
// 設定第二個選單內容為SignTab MovieClip,標題不顯示文字只採用tab2圖示
var tab2 = this.createChild("SignTab", "tab2", {label:'', icon:"tab2"});
// 設定第三個選單內容為QueryTab MovieClip,標題不顯示文字只採用tab3圖示
var tab3 = this.createChild("QueryTab", "tab3", {label:'', icon:"tab3"});
tab1.setSize (77, 890 - 28*3);
tab2.setSize (77, 890 - 28*3);
tab3.setSize (77, 890 - 28*3);
}

Mouse.hide();
this.onMouseMove=function(){
this.MyCursor._x=this._xmouse;
this.MyCursor._y=this._ymouse;
}class UI.Control.CursorFactory
{
static var cursors : Array;
private function CursorFactory (){}
static function Make(){
cursors=new Array();
cursors ["drawLine"] =
_root.attachMovie ("drawLine", "drawLine", _root.getNextHighestDepth ());
cursors ["drawLine"]._visible = false;
cursors ["rubber"] =
_root.attachMovie ("rubber", "rubber", _root.getNextHighestDepth ());
cursors ["rubber"]._visible = false;
cursors ["signature"] =
_root.attachMovie ("signature", "signature", _root.getNextHighestDepth ());
cursors ["signature"]._visible = false;
var thisCursors = cursors;
_root.onMouseMove=function (){
for (var i in thisCursors){
thisCursors [i]._x = _root._xmouse;
thisCursors [i]._y = _root._ymouse;
}
};
}
static function AddCursor (id : String, instance : String){
cursors [id] = _root.attachMovie (instance, id, _root.getNextHighestDepth ());
cursors [id]._visible = false;
}
static function Change (id : String){
//trace("Change:"+id+"/"+cursors [id]);
if (cursors [id] != undefined){
//trace("Change:"+cursors[id]);
cursors [id]._visible = true;
Mouse.hide ();
}
}
static function HideAll (){
for (var i in cursors){
cursors [i]._visible = false;
}
Mouse.show ();
}
}class test{ private var str1:String; public var str2:String;
};
var a:text=new test();
a.str2="ok"; // allow
a.str1="fail"; // deny
var b:Object=a;
a.str2="ok"; // allow
a.str1="ok"; // allow
在利用Flash開發應用程式時,我們必須考慮到系統未來維護以及修改的過程中,如果具備一般程式語言的好維護以及Flash程式的生動。在此我們還是考量到最簡單的MVC三段架構,透過Flash本身優異的畫面處理能力幫我們解決View的問。Model則透過SEPY建置,寫出解決各種邏輯的元件庫或強大的函釋庫。最後透過Flash元件的Event Control,我們將View與Model做最後的聯繫,達到我們預期的目的在。

Flash在撰寫Class Library的時候,其實可以寫得很類似Java,因為Flash同樣支援Class Path的概念,而SEPY也會根據檔案存放的目錄帶入相對的Class Path,節省對於Class Path的設計自行判斷的困擾。
在Flash的Menu中,通常在Edit->Reference裡面都會存在ActionScript頁面來提供設定Class Path,透過設定Class Path之後,Flash軟體在撰寫ActionScript的時候,就可以透過正確的Namespace索引,直接去使用該Class Path下的每個Class,以下圖的設定中,我將C:\FDISS設定為ActionScript 2.0的Class Path,再來我就要在該目錄下進行程式碼的撰寫,並最後讓Flash File使用。
在開始利用SEPY撰寫ActionScript之前,我們也在新增的WorkSpace中,加入了FIDSS的目錄,並且她立刻會將該目錄下的子目錄與檔案帶入,此時我們就可以透過WorkSpace來管理這個目錄的檔案資料,同時建立更多的class。
如果我們在C:\FIDSS中的DataProvider目錄下,想要建立一個新的Class時,只要在WorkSpace的該目錄上點選右鍵,選擇[Add]選項內的[New ActionScript 2.0 class],就可以開始產生Class之路。
透過SEPY產生新的Class是十分便利的,通常我們不需要異動Package的設定,只要在File Location中設定好預期的Class Name,並且確認是否需要繼承特定元件(如:MovieClip)或引用特定的Interface。引用特定的Interface時,Option功能將會開放點選是否希望直接讓SEPY幫你產生繼承自Interface所需要實作的Method。範例中我在DataProvider中建立了一個TestClass的Class並且繼承自MovieClip。
新建立好的Class將會產生最基礎的框架,來提供程式的撰寫,假設我們在function TestClass的建構式中多加入了trace("TestClass Create");的程式碼來提供Class的測試。
在Flash畫面編輯中,我們直接在Keyframe上新增一小段程式碼來測試,程式碼僅僅單純產生一個新的DataPorivder.TestClass元件,而不做其他的動作。
最後,我們執行該Flash,看看該元件的建立訊息是否有出現於Output Window。
