统计在线人数...

三星弹性导航菜单再探详解

[ 来源:互联网 | 作者:陪你去…… | 时间:2006-9-1 下午 11:26:19 | 浏览:统计中... ]

呵,还没完,因为我吸附效果不是通过直接距离实现的,偷懒用了一个透明的 mc通过hitTest来判断上面的代码你如果仔细看了一定发现 每个按钮下我都 attachMovieClip()就是这样
在这上面我加了下面的代码:
看了这么大一堆代码别晕哦,其实我就是想让当鼠标靠近按钮的时候,被吸引了以后就像按下按钮被拖动的时候效果一样跟着鼠标走了,由于与前面联系的变量很多,要解决的逻辑问题也很多,你完全可以按照你的思路去,同样一个效果实现的 手段绝对不止一种
onClipEvent (load) {
this.oldx = _parent._x;
this.oldy = _parent._y;
}
onClipEvent (enterFrame) {
this.dx = (_parent._x-this.oldx)*(_parent._x-this.oldx)+(_parent._y-this.oldy)*(_parent._y-this.oldy);
if (_root.forbid == 0 || _root.forbidname == _parent._name) {
if (_parent.hitTest(_root._xmouse, _root._ymouse, true)) {
_root.forbid = 1;
_root.forbidname = _parent._name;
t = substring(_parent._name, 2, 1);
this.ok = 1;
if (this.dx>=20000 && _root["a"+t].pres == false) {
_parent._x = this.oldx;
_parent._y = this.oldy;
_root.dr = false;
_root["a"+t].dragging = false;
_root.forbidname = _parent._name;
_root.forbid = 0;
_root["a"+t].gotoAndStop(1);
} else {
_root.dr = true;
_root["a"+t].dragging = true;
_parent._x = _root._xmouse;
_parent._y = _root._ymouse;
_root["a"+t]._x = _root._xmouse;
_root["a"+t]._y = _root._ymouse;
}
} else {
if (_root["a"+t].pres == false) {
if (this.ok) {
_parent._x = this.oldx;
_parent._y = this.oldy;
_root.dr = false;
_root["a"+t].dragging = false;
this.ok = 0;
_root.forbidname = _parent._name;
_root.forbid = 0;
_root["a"+t].gotoAndStop(1);
}
}
}
}
}
忘了说了,就是偷懒没有多写一段代码_creatEmptyMovieClip()我直接在主场景中建立了一个空的名叫li的mc存放画的线条源文件待会再传给大家吧,明白了思路我想不用原文件一样能重新弄出来

首先补充说说弹性的原理吧:)
看看下面的代码吧: 你看首先不是弹性运动,但是我想让场景中的mc变速运动
onClipEvent (load) {
ax=0.5
vx=2
}
onClipEvent (enterFrame) {
vx += ax;
_x += vx;
}
上面的代码很简单,mc会不断加速运动,每次加速的数值由ax的量决定。
上面的理解了吧? 看过物理上的单摆运动吗?从最位移处到中点处加速度是不断的减小的,与此同时速度不断增大,不会忘记吧 ,呵呵,还应该记得,单摆运动的时候如果有阻力
振幅会不断的减小,就象我们的弹性运动!
对了,现在要做的就是改变上面代码的加速度,就象单摆运动的时候,过平衡位置
加速度变成反方向的,加速度也不断减小,怎么把上面的变量联系转化成代码呢??
很简单,将加速度与距离平衡位置的距离联系,距离越大,加速度越大,于是我们得到:
ax=(tx-_x)*k
这样就完全实现了单摆的模拟加速度,呵呵,要是这不明白我可没办法了哦:)
tx是目标位置,也就是平衡位置!!单摆最终会停在平衡位置是因为阻力,我们这里添加
一个damp和起来就是下面的东东啦:
onClipEvent (enterFrame) {
ax = (tx-_x)*k;
vx += ax;
_x += vx;
vx*=damp
}
好了,差不多收工了吧,我的代码
首先tarx-this._x计算与目标点的距离乘k转化与加速度关联
这里由于我偷懒就没出现ax了,直接乘了
this.vx += (tarx-this._x)*k;
this.vy += (tary-this._y)*k; // (tary-this._y)*k=ax相当于this.vy +=ay
this.vx = this.vx*damp;
this.vy = this.vy*damp;
this._x+= this.vy
源文件

点击浏览该文件

上一页  [1] [2] 

共有0人参与评价,平均得分:0分
评论内容只代表网友观点,与本站立场无关! 查看完整内容
   

当前在线人数
QQ:748838 MSN:allen_xia#msn.com E-mail:allenxia666#126.com QQ群:站长联盟北方区-北京(28200145) 站长联盟南方区-上海(67713522)