鼠标特效--弹性框架的制作,同时给菜鸟一些建议
作者 佚名技术
来源 服务器技术
浏览
发布时间 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Flash 视频(FLV)编码,转换,录制,播放方案一网打尽下一篇: 巧妙的鼠标效果
关于鼠标特效--弹性框架的制作,同时给菜鸟一些建议的所有评论