主题:  弹性导航菜单的做法

naranakula

职务:普通成员
等级:1
金币:0.0
发贴:1
#12003/1/11 9:50:33
eworld.6to23.com   阿酷娜  转载请注明出处 演示站点http://tv.btu.edu.cn

             原代码下载 49K (请到 eworld.6to23.com)   

   看了看了三星的站点,觉得他做的很好,仿照他做了一个,可惜我的技术没有达到他们的水平,很多地方不会做,网络上的资料有很有限,现在我还没有明白他是怎样做到鼠标不在影片区时控制mc的移动的。那几个弹力小框我写了两天,做的不是很好,我觉得Bytesoon建议我用类,那样方便,当时,在可以预见的两个小时内,我完全有可能写完所有代码,为了省事,我没有接纳。现在,有一点后悔了! 因为要加一个点,或删除一个点,必须改动很多代码,用了类,在所需控制点足够多的情况下一定简单。留下了一点遗憾。:( -------本站只有一个HTML页面,其余是*.swf文件.所有效果是用Java和Action脚本生成的!所以如果你看到的效果很慢,有明显的停顿现象,您不要奇怪,您的主频可能很低! 在进入页面约0.5-2.5 秒的时候,有一个计算高峰,以后计算量会变小.
   在这个动画中,5个mc 之间互相作用,就好象有一个橡皮筋把他们联系在一起!在做这个动画之前,我们复习以下高中物理:
    F= k * x 弹力= 倔强系数 * 弹簧伸长量
    v=a * t 速度=加速度 * 时间
    a=f/m;     F = k*x-f1    a =((k*x)-f1*v)/m   f1为阻力系数:
    df=f/k  df为移动距离 
    用高数知识很容易知道速度在一个很小的时间内,物体移动的距离和那一个瞬间物体速度成正比:
     df = KM( tv * f1 ) +KN(ta)  tv为某个时间点的速度 ta哪个时间点的加速度,在这里我把一个时间间隔看成两个frame 间的间隔。
    现在已经建立了一个近似的模型,剩下的就是用程序去求解每个frame中mc的位置!
    为了方便计算,我把速度等变量分解成 x 和 y 两个方向分别进行计算,再把结果分别赋予mc!

1:建一个mc 名字为drag,共 4 帧:

  第一帧 代码如下:
fscommand("allowscale", "false");
fscommand("showmenu""false");
fscommand("fullscreen", "false"); //不用我解释把?
startx1 = parseInt(getProperty("_root.drag.drag1", _x));
starty1 = parseInt(getProperty("_root.drag.drag1", _y));
startx2 = parseInt(getProperty("_root.drag.drag2", _x));
starty2 = parseInt(getProperty("_root.drag.drag2", _y));
startx3 = parseInt(getProperty("_root.drag.drag3", _x));
starty3 = parseInt(getProperty("_root.drag.drag3", _y));
startx4 = parseInt(getProperty("_root.drag.drag4", _x));
starty4 = parseInt(getProperty("_root.drag.drag4", _y));
startx5 = parseInt(getProperty("_root.drag.drag5", _x));
starty5 = parseInt(getProperty("_root.drag.drag5", _y));
// 保存初始坐标,便于计算弹力大小方向,
// trace("startx1");
// trace(startx1);
oldx1 = startx1;
oldy1 = starty1;
oldx2 = startx2;
oldy2 = starty2;
oldx3 = startx3;
oldy3 = starty3;
oldx4 = startx4;
oldy4 = starty4;
oldx5 = startx5;
oldy5 = starty5;
// 保留上次坐标现在当然相等了!
newx1 = startx1;
newx2 = startx2;
newx3 = startx3;
newx4 = startx4;
newx5 = startx5;
newy1 = starty1;
newy2 = starty2;
newy3 = starty3;
newy4 = starty4;
newy5 = starty5;
speedx1 = 0;
speedy1 = 0;
speedx2 = 0;
speedy2 = 0;
speedx3 = 0;
speedy3 = 0;
speedx4 = 0;
speedy4 = 0;
speedx5 = 0;
speedy5 = 0;
// 速度初始化
flag = false; //是否有mc响应鼠标事件。
flag1 = false;
flag2 = false;
flag3 = false;
flag4 = false;
flag5 = false;
// 判断哪个被拖动。 初始值为没有拖动·
dfx1 = 0;
dfx2 = 0;
dfx3 = 0;
dfx4 = 0;
dfx5 = 0;
a1x = 0;
a1y = 0;
a2x = 0;
a2y = 0;
a3x = 0;
a3y = 0;
a4x = 0;
a4y = 0;
a5x = 0;
a5y = 0;
// 初始加速度
k = 3/4;
// 倔强系数
move = 1/4;
// 相临物体牵连系数
move2 = 3/5;
// 间隔物体牵连系数
f = 7/8;
// 阻力系数


  第二帧 代码如下:

newx1=parseInt(getProperty("_root.drag.drag1",_x));
newy1=parseInt(getProperty("_root.drag.drag1",_y));
newx2=parseInt(getProperty("_root.drag.drag2",_x));
newy2=parseInt(getProperty("_root.drag.drag2",_y));
newx3=parseInt(getProperty("_root.drag.drag3",_x));
newy3=parseInt(getProperty("_root.drag.drag3",_y));
newx4=parseInt(getProperty("_root.drag.drag4",_x));
newy4=parseInt(getProperty("_root.drag.drag4",_y));
newx5=parseInt(getProperty("_root.drag.drag5",_x));
newy5=parseInt(getProperty("_root.drag.drag5",_y));//获得drag中mc现在的位置
//trace(_root.drag.drag1.speedx1)
//trace(newx1);
///trace(newx2);
///trace(newx3);
dfx1=startx1-newx1;
dfy1=starty1-newy1;
dfx2=startx2-newx2;
dfy2=starty2-newy2;
dfx3=startx3-newx3;
dfy3=starty3-newy3;
dfx4=startx4-newx4;
dfy4=starty4-newy4;
dfx5=startx5-newx5;
dfy5=starty5-newy5;//与最初坐标的距离
oldx1=newx1;
oldy1=newy1;
oldx2=newx2;
oldy2=newy2;
oldx3=newx3;
oldy3=newy3;
oldx4=newx4;
oldy4=newy4;
oldx5=newx5;
oldy5=newy5;// 存如现在坐标备用
//speedx1=parseInt(speedx1*k);
//trace(speedx1);
//stop();
//stop();
//speedx1=speedx1+
//trace(dfx1);
duplicateMovieClip ("line", "newLine1", 1);  //绘制线条连接5个 mc !
setProperty ("newLine1", _x, newx1);
setProperty ("newLine1", _y, newy1);
setProperty ("newLine1", _xscale, (newx2-newx1)/5);
setProperty ("newLine1", _yscale, (newy2-newy1)/5);
duplicateMovieClip ("line", "newLine2", 2);
setProperty ("newLine2", _x, newx2);
setProperty ("newLine2", _y, newy2);
setProperty ("newLine2", _xscale,(newx3-newx2)/5);
setProperty ("newLine2", _yscale, (newy3-newy2)/5);
duplicateMovieClip ("line", "newLine3", 3);
setProperty ("newLine3", _x, newx3);
setProperty ("newLine3", _y, newy3);
setProperty ("newLine3", _xscale, (newx4-newx3)/5);
setProperty ("newLine3", _yscale, (newy4-newy3)/5);
duplicateMovieClip ("line", "newLine4", 4);
setProperty ("newLine4", _x, newx4);
setProperty ("newLine4", _y, newy4);
setProperty ("newLine4", _xscale, (newx5-newx4)/5);
setProperty ("newLine4", _yscale, (newy5-newy4)/5);
duplicateMovieClip ("line", "newLine5", 5);
setProperty ("newLine5", _x, newx5);
setProperty ("newLine5", _y, newy5);
setProperty ("newLine5", _xscale, (newx1-newx5)/5);
setProperty ("newLine5", _yscale, (newy1-newy5)/5);

  第三帧 代码如下:
gotoAndPlay(2);

   2 和 3 两帧构成一个帧,不断检测当前的mc的位置,并绘制line连接当前mc。

2。在这个 mc 中建立 5 个 mc 名字为
    drag1,drag2,drag3,drag4,drag5,drag6

  drag1 中 写如以下代码:
onClipEvent(mouseMove)
{
if(_root.drag.flag1)///判断drag1 是否获得鼠标事件 是的话,开始拖动
{
move=_root.drag.move;
move2=_root.drag.move2;
//trace(_root.drag.newx2);
setProperty("_root.drag.drag2",_x,_root.drag.startx2-_root.drag.dfx1*move); ///拖动drag1的时候,对drag2--drag5的位置进行计算
setProperty("_root.drag.drag2",_y,_root.drag.starty2-_root.drag.dfy1*move);
setProperty("_root.drag.drag5",_x,_root.drag.startx5-_root.drag.dfx1*move);
setProperty("_root.drag.drag5",_y,_root.drag.starty5-_root.drag.dfy1*move);
setProperty("_root.drag.drag3",_x,_root.drag.startx3-_root.drag.dfx2*move2);
setProperty("_root.drag.drag3",_y,_root.drag.starty3-_root.drag.dfy2*move2);
setProperty("_root.drag.drag4",_x,_root.drag.startx4-_root.drag.dfx5*move2);
setProperty("_root.drag.drag4",_y,_root.drag.starty4-_root.drag.dfy5*move2);
}
}
onClipEvent(enterFrame)
{
if(not _root.drag.flag) ///判断是不是没有鼠标事件发生在每个mc上,没有的话,开始自由弹性移动!
{
_root.drag.a1x=_root.drag.dfx1*_root.drag.k;  ////计算drag1 x 方向的加速度
_root.drag.a1y=_root.drag.dfy1*_root.drag.k; /////计算drag1 Y 方向的加速度
_root.drag.speedx1=_root.drag.speedx1*_root.drag.f+_root.drag.a1x; ////计算drag1 x 方向的速度
_root.drag.speedy1=_root.drag.speedy1*_root.drag.f+_root.drag.a1y;////计算drag1 y 方向的速度
//trace(Math.abs(_root.drag.speedy1));
setProperty("_root.drag.drag1",_x,_root.drag.newx1+_root.drag.speedx1);////根据计算结果set mc drag1的位置!想不通的话。看看微积分
setProperty("_root.drag.drag1",_y,_root.drag.newy1+_root.drag.speedy1);
//trace(_root.drag.newx1-_root.drag.speedx1);
_root.drag.a2x=_root.drag.dfx2*_root.drag.k;////计算drag2 x 方向的加速度
_root.drag.a2y=_root.drag.dfy2*_root.drag.k;////计算drag2 y 方向的加速度
_root.drag.speedx2=_root.drag.speedx2*_root.drag.f+_root.drag.a2x;////计算drag2 x 方向的速度
_root.drag.speedy2=_root.drag.speedy2*_root.drag.f+_root.drag.a2y;////计算drag2 y 方向的速度
setProperty("_root.drag.drag2",_x,_root.drag.newx2+_root.drag.speedx2);/////根据计算结果set mc drag2的位置
setProperty("_root.drag.drag2",_y,_root.drag.newy2+_root.drag.speedy2);
_root.drag.a5x=_root.drag.dfx5*_root.drag.k;
_root.drag.a5y=_root.drag.dfy5*_root.drag.k;///////////////////////////////////////////////////////////////
_root.drag.speedx5=_root.drag.speedx5*_root.drag.f+_root.drag.a5x;///////////////////////以下代码说明同上
_root.drag.speedy5=_root.drag.speedy5*_root.drag.f+_root.drag.a5y;/////////////////////////////////////////
setProperty("_root.drag.drag5",_x,_root.drag.newx5+_root.drag.speedx5);
setProperty("_root.drag.drag5",_y,_root.drag.newy5+_root.drag.speedy5);
_root.drag.a3x=_root.drag.dfx3*_root.drag.k;
_root.drag.a3y=_root.drag.dfy3*_root.drag.k;
_root.drag.speedx3=_root.drag.speedx3*_root.drag.f+_root.drag.a3x;
_root.drag.speedy3=_root.drag.speedy3*_root.drag.f+_root.drag.a3y;
setProperty("_root.drag.drag3",_x,_root.drag.newx3+_root.drag.speedx3);
setProperty("_root.drag.drag3",_y,_root.drag.newy3+_root.drag.speedy3);
_root.drag.a4x=_root.drag.dfx4*_root.drag.k;
_root.drag.a4y=_root.drag.dfy4*_root.drag.k;
_root.drag.speedx4=_root.drag.speedx4*_root.drag.f+_root.drag.a4x;
_root.drag.speedy4=_root.drag.speedy4*_root.drag.f+_root.drag.a4y;
setProperty("_root.drag.drag4",_x,_root.drag.newx4+_root.drag.speedx4);
setProperty("_root.drag.drag4",_y,_root.drag.newy4+_root.drag.speedy4);

}
}

drag2 中 写如以下代码:

onClipEvent(mouseMove)
{
if(_root.drag.flag2)
{
move=_root.drag.move;
move2=_root.drag.move2;
setProperty("_root.drag.drag1",_x,_root.drag.startx1-_root.drag.dfx2*move);
setProperty("_root.drag.drag1",_y,_root.drag.starty1-_root.drag.dfy2*move);
setProperty("_root.drag.drag3",_x,_root.drag.startx3-_root.drag.dfx2*move);
setProperty("_root.drag.drag3",_y,_root.drag.starty3-_root.drag.dfy2*move);
setProperty("_root.drag.drag4",_x,_root.drag.startx4-_root.drag.dfx5*move2);
setProperty("_root.drag.drag4",_y,_root.drag.starty4-_root.drag.dfy5*move2);
setProperty("_root.drag.drag5",_x,_root.drag.startx5-_root.drag.dfx1*move2);
setProperty("_root.drag.drag5",_y,_root.drag.starty5-_root.drag.dfy1*move2);
}
}

drag3 中 写如以下代码:

onClipEvent(mouseMove)
{
if(_root.drag.flag3)
{
move=_root.drag.move;
move2=_root.drag.move2;
//trace(_root.drag.newx2);
setProperty("_root.drag.drag2",_x,_root.drag.startx2-_root.drag.dfx3*move);
setProperty("_root.drag.drag2",_y,_root.drag.starty2-_root.drag.dfy3*move);
setProperty("_root.drag.drag4",_x,_root.drag.startx4-_root.drag.dfx3*move);
setProperty("_root.drag.drag4",_y,_root.drag.starty4-_root.drag.dfy3*move);
setProperty("_root.drag.drag1",_x,_root.drag.startx1-_root.drag.dfx2*move2);
setProperty("_root.drag.drag1",_y,_root.drag.starty1-_root.drag.dfy2*move2);
setProperty("_root.drag.drag5",_x,_root.drag.startx5-_root.drag.dfx4*move2);
setProperty("_root.drag.drag5",_y,_root.drag.starty5-_root.drag.dfy4*move2);
}
}
onClipEvent(enterFrame)
{
if(not _root.drag.flag and not _root.drag.flag3)
{
_root.drag.a3x=_root.drag.dfx3*_root.drag.k;
_root.drag.a3y=_root.drag.dfy3*_root.drag.k;

_root.drag.speedx3=_root.drag.speedx3*_root.drag.f+_root.drag.a3x;
_root.drag.speedy3=_root.drag.speedy3*_root.drag.f+_root.drag.a3y;
//trace(Math.abs(_root.drag.speedy1));
if(Math.abs(_root.drag.speedy3)<1 and Math.abs(_root.drag.newx3-_root.drag.startx3)< 0 and Math.abs(_root.drag.newy1-_root.drag.starty1)<1)
{
setProperty("_root.drag.drag1",_x,_root.drag.stratx1);
setProperty("_root.drag.drag1",_y,_root.drag.straty1);
_root.drag.flag=false;
}
setProperty("_root.drag.drag1",_x,_root.drag.newx1+_root.drag.speedx1);
setProperty("_root.drag.drag1",_y,_root.drag.newy1+_root.drag.speedy1);
//trace(_root.drag.newx1-_root.drag.speedx1);
_root.drag.a2x=_root.drag.dfx2*_root.drag.k;
_root.drag.a2y=_root.drag.dfy2*_root.drag.k;
_root.drag.speedx2=_root.drag.speedx2*_root.drag.f+_root.drag.a2x;
_root.drag.speedy2=_root.drag.speedy2*_root.drag.f+_root.drag.a2y;
setProperty("_root.drag.drag2",_x,_root.drag.newx2+_root.drag.speedx2);
setProperty("_root.drag.drag2",_y,_root.drag.newy2+_root.drag.speedy2);
_root.drag.a5x=_root.drag.dfx5*_root.drag.k;
_root.drag.a5y=_root.drag.dfy5*_root.drag.k;
_root.drag.speedx5=_root.drag.speedx5*_root.drag.f+_root.drag.a5x;
_root.drag.speedy5=_root.drag.speedy5*_root.drag.f+_root.drag.a5y;
setProperty("_root.drag.drag5",_x,_root.drag.newx5+_root.drag.speedx5);
setProperty("_root.drag.drag5",_y,_root.drag.newy5+_root.drag.speedy5);
_root.drag.a3x=_root.drag.dfx3*_root.drag.k;
_root.drag.a3y=_root.drag.dfy3*_root.drag.k;
_root.drag.speedx3=_root.drag.speedx3*_root.drag.f+_root.drag.a3x;
_root.drag.speedy3=_root.drag.speedy3*_root.drag.f+_root.drag.a3y;
setProperty("_root.drag.drag3",_x,_root.drag.newx3+_root.drag.speedx3);
setProperty("_root.drag.drag3",_y,_root.drag.newy3+_root.drag.speedy3);
_root.drag.a4x=_root.drag.dfx4*_root.drag.k;
_root.drag.a4y=_root.drag.dfy4*_root.drag.k;
_root.drag.speedx4=_root.drag.speedx4*_root.drag.f+_root.drag.a4x;
_root.drag.speedy4=_root.drag.speedy4*_root.drag.f+_root.drag.a4y;
setProperty("_root.drag.drag4",_x,_root.drag.newx4+_root.drag.speedx4);
setProperty("_root.drag.drag4",_y,_root.drag.newy4+_root.drag.speedy4);

}
}


drag4 中 写如以下代码:

onClipEvent(mouseMove)
{
if(_root.drag.flag4)
{
move=_root.drag.move;
move2=_root.drag.move2;
//trace(_root.drag.newx2);
setProperty("_root.drag.drag3",_x,_root.drag.startx3-_root.drag.dfx4*move);
setProperty("_root.drag.drag3",_y,_root.drag.starty3-_root.drag.dfy4*move);
setProperty("_root.drag.drag5",_x,_root.drag.startx5-_root.drag.dfx4*move);
setProperty("_root.drag.drag5",_y,_root.drag.starty5-_root.drag.dfy4*move);
setProperty("_root.drag.drag1",_x,_root.drag.startx1-_root.drag.dfx5*move2);
setProperty("_root.drag.drag1",_y,_root.drag.starty1-_root.drag.dfy5*move2);
setProperty("_root.drag.drag2",_x,_root.drag.startx2-_root.drag.dfx3*move2);
setProperty("_root.drag.drag2",_y,_root.drag.starty2-_root.drag.dfy3*move2);
}
}


drag5 中 写如以下代码:

onClipEvent(mouseMove)
{
if(_root.drag.flag5)
{
move=_root.drag.move;
move2=_root.drag.move2;
//trace(_root.drag.newx2);
setProperty("_root.drag.drag1",_x,_root.drag.startx1-_root.drag.dfx5*move);
setProperty("_root.drag.drag1",_y,_root.drag.starty1-_root.drag.dfy5*move);
setProperty("_root.drag.drag4",_x,_root.drag.startx4-_root.drag.dfx5*move);
setProperty("_root.drag.drag4",_y,_root.drag.starty4-_root.drag.dfy5*move);
setProperty("_root.drag.drag3",_x,_root.drag.startx3-_root.drag.dfx4*move2);
setProperty("_root.drag.drag3",_y,_root.drag.starty3-_root.drag.dfy4*move2);
setProperty("_root.drag.drag2",_x,_root.drag.startx2-_root.drag.dfx1*move2);
setProperty("_root.drag.drag2",_y,_root.drag.starty2-_root.drag.dfy1*move2);
}
}





现在他还不能拖动,要他能拖动 的话在drag1中加入一个button,button 中代码为:
on (rollOver) {//鼠标移动是的吸附
_root.drag.flag1 = true;  // 表示当前mc drag1 在拖动,
_root.drag.flag = true;   //有mc获得鼠标响应
startDrag(this, true, -110, -110, 350, 240);//开始拖动,定义拖动范围!
dra1.gotoAndPlay(2);///播放拖动时候的显示动画
}

on (rollOut) {//鼠标移到热区外停止拖动
_root.drag.flag1 = false;///当前drag1失去鼠标,flag1为flase
_root.drag.flag = false;///没有mc 的到鼠标
stopDrag();//停止拖动
dra1.gotoAndPlay(16);//播放停止拖动时候的动画
}
on(press)
{
_root.drag.flag1 = true;//当前drag1失去鼠标,flag1为flase
_root.drag.flag = true;///没有mc 的到鼠标
startDrag(this, true, -110, -110, 350, 240);//开始拖动,定义拖动范围
dra1.gotoAndStop("end");//播放按下时候的动画

}
on(release, releaseOutside)
{
_root.drag.flag1 = false;//当前drag1失去鼠标,flag1为flase
_root.drag.flag = false;//没有mc 的到鼠标
stopDrag();//停止拖动
dra1.gotoAndPlay(16);//播放停止拖动时候的动画
getURL("java script:akula('show11');");///传递一个参数给JAVASCRIPT,执行某个操作!

}

在drag2中加入一个button,button 中代码为: ////////////////////////////////////
on (press, rollOver) {/////////////////////////////////以下代码说明同上
_root.drag.flag2 = true;///////////////////////////////////////////////////////
_root.drag.flag = true;
startDrag(this, true, -110, -50, 350, 240);
dra2.gotoAndPlay(1);
}
on (rollOut) {
_root.drag.flag2 = false;
_root.drag.flag = false;
stopDrag();
dra2.gotoAndPlay(16);
}
on(release, releaseOutside)
{
_root.drag.flag2 = false;
_root.drag.flag = false;
stopDrag();
dra2.gotoAndPlay(16);
getURL("java script:akula('show12');");

}
on(press)
{ dra2.gotoAndStop(16);

}

在drag3中加入一个button,button 中代码为:

on (press, rollOver) {
_root.drag.flag3 = true;
_root.drag.flag = true;
startDrag(this, true, -100, -10, 380, 260);
dra3.gotoAndPlay(1);
}
on (rollOut) {
_root.drag.flag3 = false;
_root.drag.flag = false;
stopDrag();
dra3.gotoAndPlay(16);
}
on(release, releaseOutside)
{
_root.drag.flag3 = false;
_root.drag.flag = false;
stopDrag();
dra3.gotoAndPlay(16);
getURL("java script:akula('show13');");

}
on(press)
{ dra3.gotoAndStop(16);

}

在drag4中加入一个button,button 中代码为:

on (press, rollOver) {
_root.drag.flag4 = true;
_root.drag.flag = true;
startDrag(this, true, -10, -10, 400, 260);
dra4.gotoAndPlay(1);
}
on (rollOut) {
_root.drag.flag4 = false;
_root.drag.flag = false;
stopDrag();
dra4.gotoAndPlay(16);
}
on(release, releaseOutside)
{
_root.drag.flag4 = false;
_root.drag.flag = false;
stopDrag();
dra4.gotoAndPlay(16);
getURL("java script:akula('show14');");

}
on(press)
{ dra4.gotoAndStop("end");

}

在drag5中加入一个button,button 中代码为:

on (press, rollOver) {
_root.drag.flag5 = true;
_root.drag.flag = true;
startDrag(this, true, -10, -50, 400, 260);
dra5.gotoAndPlay(1);
}
on (rollOut) {
_root.drag.flag5 = false;
_root.drag.flag = false;
stopDrag();
dra5.gotoAndPlay(16);
}
on(release, releaseOutside)
{
_root.drag.flag5 = false;
_root.drag.flag = false;
stopDrag();
dra5.gotoAndPlay(16);
getURL("java script:akula('show15');");

}
on(press)
{ dra5.gotoAndStop("end");

}



     现在,5个mc 可以拖动了,可是没有鼠标触发的时候,他们不能动的 ,如果能随机的让他们用随机的速度和随机的方向运动的话
效果回更好!

在主场景中建一个mc 名为 random

第3帧代码为:////一定要在第2帧以后,否则不能触发!

setProperty("_root.drag.drag1",_x,180);  ///////////以下是进入是时候设置5个mc 的位置
setProperty("_root.drag.drag1",_y,140);   ////////此时_root.drag.flag为flase, drag.drag1的

setProperty("_root.drag.drag2",_x,180);////////// onClipEvent(enterFrame)事件触发,5个mc 开始自由弹性运动
setProperty("_root.drag.drag2",_y,140);

setProperty("_root.drag.drag3",_x,180);
setProperty("_root.drag.drag3",_y,140);

setProperty("_root.drag.drag4",_x,180);
setProperty("_root.drag.drag4",_y,140);

setProperty("_root.drag.drag5",_x,180);
setProperty("_root.drag.drag5",_y,140);

setProperty("_root.drag.drag6",_x,180);
setProperty("_root.drag.drag6",_y,140);


第5帧代码为:

who=random(5)+1;///产生一个12345中的随机数字
//trace(who);


第75帧代码为:

if(not _root.drag.flag)   /////如果没有mc被鼠标拖动时,根据随机数字设置5个mc 的位置
{
dx=40+random(50);/// mc 在x方向上的随机移动距离
dy=40+random(50);///mc 在y方向上的随机移动距离
// trace(_root.drag.move);
switch (who)
{
case 1://///////////////////////////////////////////////以下是 什么意思,我想不用说了把!
setProperty(_root.drag.drag1,_x,_root.drag.startx1+dx);
setProperty(_root.drag.drag1,_y,_root.drag.starty1+dx);
setProperty(_root.drag.drag2,_x,_root.drag.startx2+dx*_root.drag.move);
setProperty(_root.drag.drag2,_y,_root.drag.starty2+dy*_root.drag.move);
setProperty(_root.drag.drag5,_x,_root.drag.startx5+dx*_root.drag.move);
setProperty(_root.drag.drag5,_y,_root.drag.starty5+dy*_root.drag.move);
setProperty(_root.drag.drag3,_x,_root.drag.startx3+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag3,_y,_root.drag.starty3+dy*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag4,_x,_root.drag.startx4+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag4,_y,_root.drag.starty4+dy*_root.drag.move *_root.drag.move);
break;

case 2:
setProperty(_root.drag.drag2,_x,_root.drag.startx2+dx);
setProperty(_root.drag.drag2,_y,_root.drag.starty2+dx);
setProperty(_root.drag.drag1,_x,_root.drag.startx1+dx*_root.drag.move);
setProperty(_root.drag.drag1,_y,_root.drag.starty1+dy*_root.drag.move);
setProperty(_root.drag.drag3,_x,_root.drag.startx3+dx*_root.drag.move);
setProperty(_root.drag.drag3,_y,_root.drag.starty3+dy*_root.drag.move);
setProperty(_root.drag.drag5,_x,_root.drag.startx5+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag5,_y,_root.drag.starty5+dy*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag4,_x,_root.drag.startx4+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag4,_y,_root.drag.starty4+dy*_root.drag.move *_root.drag.move);
break;

case 3:
setProperty(_root.drag.drag3,_x,_root.drag.startx3+dx);
setProperty(_root.drag.drag3,_y,_root.drag.starty3+dx);
setProperty(_root.drag.drag2,_x,_root.drag.startx2+dx*_root.drag.move);
setProperty(_root.drag.drag2,_y,_root.drag.starty2+dy*_root.drag.move);
setProperty(_root.drag.drag4,_x,_root.drag.startx4+dx*_root.drag.move);
setProperty(_root.drag.drag4,_y,_root.drag.starty4+dy*_root.drag.move);
setProperty(_root.drag.drag1,_x,_root.drag.startx1+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag1,_y,_root.drag.starty1+dy*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag5,_x,_root.drag.startx5+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag1,_y,_root.drag.starty5+dy*_root.drag.move *_root.drag.move);
break;


case 4:
setProperty(_root.drag.drag4,_x,_root.drag.startx4+dx);
setProperty(_root.drag.drag4,_y,_root.drag.starty4+dx);
setProperty(_root.drag.drag3,_x,_root.drag.startx3+dx*_root.drag.move);
setProperty(_root.drag.drag3,_y,_root.drag.starty3+dy*_root.drag.move);
setProperty(_root.drag.drag5,_x,_root.drag.startx5+dx*_root.drag.move);
setProperty(_root.drag.drag5,_y,_root.drag.starty5+dy*_root.drag.move);
setProperty(_root.drag.drag1,_x,_root.drag.startx1+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag1,_y,_root.drag.starty1+dy*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag2,_x,_root.drag.startx2+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag2,_y,_root.drag.starty2+dy*_root.drag.move *_root.drag.move);
break;

case 5:
setProperty(_root.drag.drag5,_x,_root.drag.startx5+dx);
setProperty(_root.drag.drag5,_y,_root.drag.starty5+dx);
setProperty(_root.drag.drag4,_x,_root.drag.startx4+dx*_root.drag.move);
setProperty(_root.drag.drag4,_y,_root.drag.starty4+dy*_root.drag.move);
setProperty(_root.drag.drag1,_x,_root.drag.startx1+dx*_root.drag.move);
setProperty(_root.drag.drag1,_y,_root.drag.starty1+dy*_root.drag.move);
setProperty(_root.drag.drag3,_x,_root.drag.startx3+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag3,_y,_root.drag.starty3+dy*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag2,_x,_root.drag.startx2+dx*_root.drag.move *_root.drag.move);
setProperty(_root.drag.drag2,_y,_root.drag.starty2+dy*_root.drag.move *_root.drag.move);
break;

}
}
gotoAndPlay(5);///回到第5帧循环触发!


        好了, 弹性导航菜单制作方法就说完了.



平凡人

职务:普通成员
等级:4
金币:17.0
发贴:1442
#22003/1/11 11:13:27
你的展示页面上没有弹性菜单呀另外去你主页也没有源码下载。