快速业务通道

鼠标特效--弹性框架的制作,同时给菜鸟一些建议

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-08
然会遇到很多很棘手的问题.在测试的时候才发现的.
做法:
1 新建一个Flash文档,大小用默认的550*400好了.
2 然后,在舞台上画一个全透明的矩形,大小:550*100,位置0,300)
3 转换为元件,实例名bg.虽然叫bg,但是是用来检测碰撞的时候用的,也是测试出问题以后才加的.
4 就是添加帧代码了,这里将会结合上面的理论对重要的代码添加注释.
代码如下:
var deceleration = 0.5;
//deceleration是控制缓冲的一个变量,取值在0~1之间,decleration越大,弹性运动越持久.deceleration=0的话,就会一下子停住,decerlation=1的话,就会不停地作等幅振动.如果小于0大于-1,将做非弹性缓冲运动,大于1或小于-1将做振幅越来越大的弹性运动,有兴趣的话可以从上面公式的证明过程里得出这些结论.
//不过简单来说,要实现我们需要的效果,decelertaion根据你的感觉,在0~1之间取一个数就好了
var ypos = 300;
//ypos是波形最低点的纵坐标.在该文档里,建议取200~320范围以内的值.
//下面的函数就是绘制曲线的函数
function drawCurve(name, depth, highpointx, highpointy, width, alpha) {
//画一个图,就要创建一个MC,name就是MC的名称,depth就是MC的深度,然后highpointx,highpointy则是最高点的坐标值,width是波形的宽度,这个值之所以设为变量,是因为框架拉得越厉害,波形的宽度越高,这样动作才不致于过分的生硬,这个读者可以尝试让width为常量.然后,alpha是MC的透明度,当然,你还可以把颜色之类的数值放到参数里面,不过这个不是重点,所以笔者就没放进去了.
this.createEmptyMovieClip(name, depth);
//创建名为name,深度为depth的一个MC
with (this[name]) {
lineStyle(1, 0x666666, alpha);//定义线条样式
beginFill(0xff9900, alpha);//定义填充样式
moveTo(0, ypos);//首先,从矩形做上角的点P1开始画线(见上面的图),参数是P1点的坐标,这是自定的.
lineTo(highpointx-width/2, ypos);//把直线P1A0画出来,参数则是A0点的坐标,算法参照上面的介绍,下同.
curveTo(highpointx-width/2+width/8, ypos, highpointx-width/4, (ypos+highpointy)/2);//画曲线A0A1,前两个参数是A的坐标,后两个参数是A1的坐标
curveTo(highpointx-width/8, highpointy, highpointx, highpointy);//画曲线A1H,前两个参数是B的坐标,后两个参数是H的坐标
curveTo(highpointx+width/8, highpointy, highpointx+width/4, (ypos+highpointy)/2);//画曲线HC0,前两个参数是C的坐标,后两个参数是C0的坐标
curveTo(highpointx+width/2-width/8, ypos, highpointx+width/2, ypos);//画曲线C0D0,前两个参数是D的坐标,后两个参数是D0的坐标
lineTo(550, ypos);//画直线D0P2
lineTo(550, 400);//画直线P2P3
lineTo(0, 400);//画直线P3P4
lineTo(0, ypos);//画直线P4P1,至此框架绘制完成.
endFill();//标记填充操作结束
}
}
this.createEmptyMovieClip("curve", 2);//创建名为curve的空MC
this.onEnterFrame = function() {
var targetx = _xmouse;//targetx框架最高点最终达到的位置的横坐标
var trendy = (Math.abs(_ymouse-ypos)<60 && (curve.hitTest(_xmouse, _ymouse, true) || bg.hitTest(_xmouse, _ymouse, true) || curvebg.hitTest(_xmouse, _ymouse, true))) ? (_ymouse) : (ypos);
var targety = trendy-deceleration*(tempy-trendy);
//targety是框架最高点达到的位置的纵坐标,本来按照算法,trendy直接用targety就行的了,但是总遇到碰撞等诸多问题,为了防止框架过度拉伸和框架自动弹起来,要计算Math.abs(_ymouse-ypos)<60,然后还要检测碰撞的问题,Math.abs(_ymouse-ypos)<60之后的那么长的检查,都是测试的时候才加上去的,笔者无法用理论解释,只能说实践才是检验真理的唯一标

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号