这个教程是面对已经有编程经验的高级用户而写的用Flash制作弹出式对话框,里面的一些细节问题我就不在一一讲解了,我只讲解我里面的一些主要的编程思想和编程技巧。而它的应用是面向一切flash学习着的,有了这个源文件,你就可以有自己的flash对话框了。
对于高级用户来说,这个例子中用了非常巧妙的编程方法来实现了弹出对话框以及对话框的确定、取消、关闭、拖动等功能,可以从中学习。 对于初级用户来说,只有会用flash的一些基本功能就可以做成修改成自己的界面,用法非常简单,一看就会,就算是你从来都没有接触过flash,也可以很快的就能任意的做自己的对话框了。在教程中及源文件中仅提供对话框的两个样式,如果需要,还可以自己制作自己的各种各样的对话框,方法见下面的教程。(源文件放在最后,有需要的可以复制保存下来)
下面来介绍制作过程:
第一步:制作对话框的实体mc。由于对话框分为各种样式,所有对话框可以有很多帧,每一帧是一种样式的对话框。对话框的样式自己定义,对话框里注要包括背景,标题文本框,确定与取消按钮,关闭按钮,主题文本框等等,这些都可以有自己制作。我的实例中只有两帧,就是只有两个样式的对话框。
另外在对话框的最上一层为action层,每一帧加一句action:
stop();
具体见实例。
第二步:完成主程序。
2-1:获得对话框的函数。具体程序如下:
// 建立一个新的对话框
function New_Msg () {
_root.attachMovie("msg", "msg"+_root.deep, _root.deep);
_root.deep++;
return eval("msg"+(_root.deep-1));
}
其中deep是在主场景下的全局变量,随着对话框的增多而曾加,防止出现深度重叠。
函数以返回的方式输出对话框mc,其中有着很巧妙的用法,看完后面的就知道了。
2-2:建立主对话框类及其成员函数。程序如下:
// 建立对话框功能类
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;
}
以上为对话框功能的类的定义,其中三个参数分别代表对话框的消息框的文字,主题框的文字和对话框的样式,具体见例子。
在这里面有内部object变量就是this.msg就是2-1步中返回的mc,这样能非常方便的对这个mc进行包括删除的操作,设置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;
};
以上为对话框的显示成员函数,它的主要功能是显示对话框。其中可以加上一个声音,这个也可以自己定义的。
这里面最巧妙的一句就是最后一句,它的巧妙之处注要用在了对话框的销毁上,你可以自己体会。
Msg.prototype.Msg_Ok = function ()
{
trace("This is Msg_Ok's action.");
//一下添加自己的功能代码:
};
Msg.prototype.Msg_Cancel = function ()
{
trace("This is Msg_Cancle's action.");
//一下添加自己的功能代码:
};
以上两个成员函数是点击确定与取消时的功能区,主要有自己添加,对话框的功能就可以在这里面实现。
Msg.prototype.Del_Msg = function ()
{
// trace("This is Del_Msg's action.");
removeMovieClip (this.msg);
};
以上的成员函数为销毁对话框的函数,在这里,可以看到mc作为函数返回值的巧妙之处。
2-3:完成深度与拖拽的功能函数。程序如下:
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;
}
}