flash5 編程高級教程系列之一(自制彈出式對話框) 這個教程是面對已經(jīng)有編程經(jīng)驗的高級用戶的,里面的一些細節(jié)問題我就不在一一講解了,我只講解我里面的一些主要的編程思想和編程技巧。而它的應(yīng)用是面向一切flash學(xué)習(xí)著的,有了這個源文件,你就可以有自己的flash對話框了,記住了,一定建立一個自己的flash功能文件夾,把一些好用又難懂的flash源文件來存在里面,已被平時使用阿。
對于高級用戶來說,我在這個例子中用了非常巧妙的編程方法來實現(xiàn)了彈出對話框以及對話框的確定、取消、關(guān)閉、拖動等功能,你可以從中學(xué)習(xí),并且如果你發(fā)現(xiàn)我的程序有什么不足之處或還有更好的方法的時候請于我聯(lián)系,我們共同商討解決。
對于初級用戶來說,你只有會用flash的一些基本功能就可以做成修改成自己的界面,用法非常簡單,一看就會,就算是你從來都沒有接觸過flash,你也可以很快的就能任意的做自己的對話框了。
我在教程中及源文件中僅提供對話框的兩個樣式,如果你需要,還可以自己制作自己的各種各樣的對話框,方法見下面的教程。 另外,因為教程制作倉卒,所以界面簡陋,望大家諒解。
下面我將介紹制作過程:
第一步:制作對話框的實體mc。由于對話框分為各種樣式,所有對話框可以有很多幀,每一幀是一種樣式的對話框。對話框的樣式自己定義,對話框里注要包括背景,標題文本框,確定與取消按鈕,關(guān)閉按鈕,主題文本框等等,這些都可以有自己制作。我的實例中只有兩幀,就是只有兩個樣式的對話框。 另外在對話框的最上一層為action層,每一幀加一句action: stop(); 具體見實例。
第二步:完成主程序。 2-1:獲得對話框的函數(shù)。具體程序如下: // 建立一個新的對話框 function New_Msg () { _root.attachMovie("msg", "msg"+_root.deep, _root.deep); _root.deep++; return eval("msg"+(_root.deep-1)); }
其中deep是在主場景下的全局變量,隨著對話框的增多而曾加,防止出現(xiàn)深度重疊。 函數(shù)以返回的方式輸出對話框mc,其中有著很巧妙的用法,看完后面的就知道了。 2-2:建立主對話框類及其成員函數(shù)。程序如下:
// 建立對話框功能類 function Msg (c_string1, c_string2, c_n) { this.string1 = c_string1; this.string2 = c_string2; this.n = c_n; // if (_root.deep == null) { _root.deep = 10000; } this.num = _root.deep; this.msg = New_Msg(); If_Deep(this.msg); this.msg._visible = 0; }
以上為對話框功能的類的定義,其中三個參數(shù)分別代表對話框的消息框的文字,主題框的文字和對話框的樣式,具體見例子。 在這里面有內(nèi)部object變量就是this.msg就是2-1步中返回的mc,這樣能非常方便的對這個mc進行包括刪除的操作,設(shè)置deep的初值為10000就是保證彈出的對話框一定在最上面。 Msg.prototype.Show = function (c_x, c_y) { this.msg._visible = 1; // this.x = c_x;this.y = c_y; if (c_x == null) { this.x = this.msg._width; } if (c_y == null) { this.y = this.msg._height; } // this.mysound = new Sound(); this.mysound.attachSound("ding"); this.mysound.start(); delete this.mysound(); this.msg.info = this.string1; this.msg.message = this.string2; this.msg.gotoAndStop(this.n); this.msg._x = this.x; this.msg._y = this.y; this.msg.that = this; };
以上為對話框的顯示成員函數(shù),它的主要功能是顯示對話框。其中可以加上一個聲音,這個也可以自己定義的。 這里面最巧妙的一句就是最后一句,它的巧妙之處注要用在了對話框的銷毀上,你可以自己體會。
Msg.prototype.Msg_Ok = function () { trace("This is Msg_Ok's action."); //一下添加自己的功能代碼:
}; Msg.prototype.Msg_Cancel = function () { trace("This is Msg_Cancle's action."); //一下添加自己的功能代碼:
};
以上兩個成員函數(shù)是點擊確定與取消時的功能區(qū),主要有自己添加,對話框的功能就可以在這里面實現(xiàn)。 Msg.prototype.Del_Msg = function () { // trace("This is Del_Msg's action."); removeMovieClip (this.msg); };
以上的成員函數(shù)為銷毀對話框的函數(shù),在這里,可以看到mc作為函數(shù)返回值的巧妙之處。
2-3:完成深度與拖拽的功能函數(shù)。程序如下:
function If_Deep(c_mc) { _root.old_mc.msg_bg.gotoAndStop(2); c_mc.msg_bg.gotoAndStop(1); _root.old_mc = c_mc; }
// 檢測鼠標與那個點擊那個mc function Mouse_Focue (c_mc) { if(_root.mymousedown == 1 && c_mc.hitTest(_root._xmouse,_root._ymouse,true)) { If_Deep(c_mc); c_mc.swapDepths(_root.deep++); c_mc.startDrag (false); // trace(c_mc); return true; }else{ c_mc.stopDrag (); return false; } } 這個函數(shù)的功能就是當鼠標在一個對話框上點擊的時候,對話框自動顯示在最前面,這是對話框最其本的標志。另外還實現(xiàn)了拖拽的功能。其中也有很多技巧,你應(yīng)該自己想一想,其中_root.deep++(注意這里可千萬不能將其顛倒,想想為什么?),另外返回值也有妙用。 這樣,我們的工作就已經(jīng)完成了大部分了,剩下的就是后補工作了,當然還有很多后補工作需要你自己做了。
第三步:判斷鼠標的按下與放開。 在這里面也不是很簡單的事,因為flash里只有按鈕和mc能判斷鼠標,所以在把這部分放到時間軸上是不太可能的事了,有因為鼠標只能在它自己的熱區(qū)里才能實現(xiàn),所以我們選擇mc,制作一個空的mc為control,并把它放在對話框mc的control層(這是最關(guān)鍵的,想想為什么要放到這里?),在上面加入代碼: onClipEvent (mouseDown) { if(_root.mouse_down_ip != true){ _root.mymousedown = 1; _root.mouse_down_ip = _root.Mouse_Focue(_parent); } } onClipEvent (mouseUp) { _root.mymousedown = 0; _root.mouse_down_ip = _root.Mouse_Focue(_parent); stopDrag(); } 在這段程序之中就能看到拖動對話框的函數(shù)的返回值有什么作用了吧,如果還不明白,那還得慢慢體會,也可以去掉試一試。
最后:完成對話框里的幾個按鈕上的action: 4-1:“確定"按鈕上的action:
on (release) { that.Msg_Ok(); // 一下添加自己的功能代碼:
that.Del_Msg(); } 這里明白2-2程序里最后一句的作用了吧。 4-2:“取消”按鈕上的action: on (release) { that.Msg_Cancel(); // 一下添加自己的功能代碼:
that.Del_Msg(); } 啊,都是一樣的啊,當然了,就是一樣的嗎。 4-3:“關(guān)閉”按鈕上的action(右上角的):
on (release) { that.Del_Msg(); } 原來就這么簡單啊。
(有關(guān)程序的實現(xiàn),請見例子) 總結(jié):到現(xiàn)在我們的對話框程序就全部完成了,有人會說,我要是自己做一個專用的早就做好了,你要用這么長時間才能作出來啊,不值啊。問問大家是嗎,不是的,我做這一個的確不值,但是要是我要很多,我還要很多此的用呢,到底值不值,大家自己也是能想清楚的。另外如果你的手里已經(jīng)有了這個程序呢,唉,簡單多了,那大家還不該學(xué)的學(xué),該收藏的收藏。
還有,那些想做我那個打字程序的同學(xué)們,這是我的第一個教程,也是那里面第一個出現(xiàn)的東西,以后還要注意,余下的程序啊。一定注意!。_^
下面為源程序:
[Ctrl+A 全部選擇 然后拷貝] 下載源文件
出處:藍色理想
責任編輯:藍色
◎進入論壇Flash專欄版塊參加討論
|