+++鬼火AS,自己也来做画图板++++++++


//复制出一些色块,并且为色块分别设定颜色
//设定色块的位置使他们整齐排列(用余数来实现,每排5个)
for (r=0; r<=0xff; r += 0x33) {
for (g=0; g<=0xff; g += 0x33) {
for (b=0; b<=0xff; b += 0x33) {
duplicateMovieClip("colorbox", "colorbox"+i, i+50);
_root["colorbox"+i]._x = 15+int(i/16)*10;
_root["colorbox"+i]._y = 40+i%16*10;
colors = new Color(_root["colorbox"+i]);
colors.setRGB(r*256*256+g*256+b*256);
i++;
}
}
}
//设定复制铅笔
duplicateMovieClip("pen", "pen1", 400000);
//设定铅笔和小色块不可见
pen._visible = false;
colorbox._visible = false;
Mouse.hide();
startDrag("pen1", true);
//pen._visible=0;
//colorbox._visible=0;
//初始化变量
pencolor = new Color(_root.pen1.pencolor1);
pencolor.setRGB(0);
n=1;
x0=0;
panduan=0;
//as for frame2//
//设定线条的函数是他们事先能够鼠标跟随地画出线条
//鼠标点下的时候记录当时的位置
if (panduan == 1) {
if (x0== 0) {
x0 = _xmouse;
y0 = _ymouse;
//当鼠标起来的时候,再次记录鼠标的位置
} else {
a1 = _xmouse;
a2 = _ymouse;
b1 = _xmouse;
b2 = _ymouse;
n = n+1;
createEmptyMovieClip("xiantiao"+n, n+10000);
with (_root["xiantiao"+n]) {
lineStyle(1, _root.pencolor.getRGB(), 100);
moveTo(x0, y0);
curveTo(a1, a2, b1, b2);
x0 = b1;
y0 = b2;
}
}
}
//as for frame3//
gotoAndPlay(2);
//as for bord button//
on (press, dragOut) {
//设置panduan的值,他将用于frame2的判断
panduan = 1;
}
on (release, dragOut) {
//还原x0的值
panduan = 0;
x0 = 0;
}
//as for color button//
on (release) {
getcolor = new Color(this);
_root.pencolor.setRGB(getcolor.getRGB());
}
//as for"取消" button//
on (release) {
while(n>1) {
_root["xiantiao"+n].clear();
n--;
}
}
//as for "后退" button//
on (release) {
if(n>1) {
_root["xiantiao"+n].clear();
n--;
}
}
//as for blankMC//
onClipEvent(enterFrame){
_root.textx=_root._xmouse-160;
_root.texty=_root._ymouse-30;
}
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
昨天偷懒,把图片和文字分开而且没有为每一步加上图示,被班班大人说了一顿.
5555
今天改过自新,重新整理一番:
我采用仿照一位师兄的源文件来做为例子来讲解这个问题.
在上面我的帖子里面已经详细的讲解了数组对象颜色(color)对象的用法.
也讲过来哦几个线条相关的方法的使用,他们的功能是很强大的,
不像我前面的例子里面那样,画几条小线线而已.
讲一讲思路,大家应该习惯于在做一件flash之前讲要做的步骤考虑好
//建立颜色库,让他们有序的排列
//设置钢笔可以从颜色库里面提取颜色
//设置钢笔落下运行的时候,线条跟着笔尖出现
//设置一个可以取消轨迹的按钮和一个可以逐步取消轨迹的按钮
//设置两个可以显示钢笔现在的位置的文本框
开始正式的工作
大家看看图示--就是很多红圈圈的那张
1:首先我们在五台上面建一个白板,将其转换为按钮对象
见图t1

2:建立两个按钮,在上面分别写上"后退"和"撤销"
见图t2

3:建立两个动态文本框,分别在前面写上x,y;为动态文本框x设置var为text_x,y为text_y
见图t3

--------------------------------------------------------------------------------
4:绘制一只钢笔,钢笔的制作有点儿技巧.为了表示好钢笔的颜色,我们将钢笔作为两层,上面一层放那些修饰性的图案.
下面一层放上一个电影夹子,命名为pencolor,作为待会儿变色的对象
5:将钢笔mc放到五台上面,命名为pen
6:新建一个mc命名为colorboxmc,制作一个10*10的小色块,什么颜色不重要,将小色块的位置设置为(0,0).
7:新建一个button,在之中绘制一个10*10的小色块,只在他的hit帧里是关键帧,其他三帧都是空白的关键帧,设置小色块的位置为(0,0)
8:将7建立botton拖到colorboxmc里面,设置其位置为(0,0)
9:将colorboxmc拖动到五台上面,命名为colorbox
10:在舞台第一帧里面添加如下代码:
for (r=0; r<=0xff; r += 0x33) {
for (g=0; g<=0xff; g += 0x33) {
for (b=0; b<=0xff; b += 0x33) {
duplicateMovieClip("colorbox", "colorbox"+i, i+50);
_root["colorbox"+i]._x = 15+int(i/16)*10;
_root["colorbox"+i]._y = 40+i%16*10;
colors = new Color(_root["colorbox"+i]);
colors.setRGB(r*256*256+g*256+b*256);
i++;
}
}
}
上面的代码的意思是,判断r,g,b的值,以16进制的0x33为单位减淡颜色,复制出来的
新的小色块的位置排列是这两句实现的:
_root["colorbox"+i]._x = 15+int(i/16)*10;
_root["colorbox"+i]._y = 40+i%16*10;
里面的15和40分别是小色块排列的x和y起始值,也就是说,我们的小色块群的左上角的坐标是(15,40)
int(i/16)*10是利用"int取得数字的不大于自身的整数"的性质来判断是否应该变化小色块的横坐标
再详细点就是:当i<16的时候,int(i/16)的值是0,那么没一行就又16个小色块.因为小色块的高是10,
所以乘以10.
第二句里面的i%16*10,是用i除以16的余数来判断是否因该变化小色块纵坐标.这样i=0和i=16时小色块的



--------------------------------------------------------------------------------
11:上面的步骤已经实现了色块的有序排列,那么下面,我们继续来讲钢笔可以从色库里面提取颜色的问题,
其实就是"要再当钢笔再小色块上面点下时,钢笔的颜色制动变化为色块的颜色.
12:我们已经知道钢笔的构成里面有pencolor作为色彩变化的对象
为了在后面画线的时候,钢笔不会被线条取代,我们需要复制一个新的钢笔,命名为pen1,将他放置倒一个很高的层里面,比如999999,呵呵
duplicateMovieClip("pen", "pen1", 400000);
隐藏原来的钢笔
pen._visible=false;
当然
pen._visible=0;
也可以,呵呵
再为钢笔的色彩变化对象pencolor1设置颜色对象pencolor,初始颜色为黑色
pencolor = new Color(_root.pen1.pencolor1);
pencolor.setRGB(0);
13:打开colorboxmx,再上面的按钮上添加下面的as:
on (release) {
getcolor = new Color(this);
_root.pencolor.setRGB(getcolor.getRGB());
}
大体的意思是:
再按下的时候,建立一个颜色装载器getcolor取得当前对象(this)的颜色,
然后设置五台上面的颜色对象pencolor的颜色为getcolor里面所存储的RGB
在第一帧上面再添加几个变量,用于后面的判断
n=1;
x0=0;
panduan=0;
//这几个变量你设初始值为多少那是你的哦事情,呵呵,不要问我为什么一定是1,0,0了.
只要在后面的变化里面设置相应的直就是了.


--------------------------------------------------------------------------------
14:下面解决第三个问题:
再第二帧建一个空白关键帧.
要钢笔在落下的时候实现线条跟着笔尖出现.
我们要利用鼠标点击事件来完成这件工作.
而我们的按钮就是那块白板.
鼠标按下的时候,鼠标有一个位置,鼠标按下再释放的时候
鼠标又有一个位置,那么可以根据这两个位置来确定线条.
但是仅仅有两个点的话,画出来的就是直线了,
所以我们还需要有另外的一帧来和第二帧构成循环,这样我们的
鼠标运动的时候才能够动态的获得鼠标的位置.
设置两个变量,当鼠标press时候和release的时候,我们的鼠标的坐标能够被储存.
在白板按钮上面添加下面的as
on (press, dragOut) {
//设置panduan的值,他将用于frame2的判断
panduan = 1;
}
on (release, dragOut) {
//还原x0的值
panduan = 0;
x0 = 0;
}
15:我们能要在鼠标点下的时候和鼠标起来的时候获得鼠标的位置,用于绘制线条.
//设定线条的函数是他们事先能够鼠标跟随地画出线条
//鼠标点下的时候记录当时的位置
if (panduan == 1) {
//panduan=1的时候也就是鼠标刚按下的时候,赋予x0新的值
if (x0== 0) {
x0 = _xmouse;
y0 = _ymouse;
//因为x0的值变成了鼠标的位置,所以x0不再为0
//当鼠标起来的时候,再次记录鼠标的位置
} else {
a1 = _xmouse;
a2 = _ymouse;
b1 = _xmouse;
b2 = _ymouse;
n = n+1;
//这时候建立许多的空白电影夹子来储存线条
createEmptyMovieClip("xiantiao"+n, n+10000);
//对每个电影夹子里面设定线条对象
with (_root["xiantiao"+n]) {
lineStyle(1, _root.pencolor.getRGB(), 100);
moveTo(x0, y0);
curveTo(a1, a2, b1, b2);
//赋予x0的值为当前的鼠标位置
x0 = b1;
y0 = b2;
}
}
}
//在第三帧里面添加gotoandplay(2);
其他的就是修饰性的工作了.
建立一个空白的mc,为他添加as:
onClipEvent(enterFrame){
_root.textx=_root._xmouse-160;
_root.texty=_root._ymouse-30;
}
里面之所以要减去160和30,是因为我们的图画板的位置在(160,30)
所以为了显示画笔在白板上面的相对位置,我们减去初始值.
//终于完成了,常常的吐了一口气: )
源文件下载:
http://file.flash8.net/2003up/2003/6/7/200367002246158.rar
