精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网页软件>FLASH教程>正文

有趣的简易软力绳教程


来源:闪吧 时间:07-04-18 点击: 点击这里收藏本文
lenmax=220;
lenx=shubiaodian._x-yuandian._x;
leny=shubiaodian._y-yuandian._y;
len=Math.sqrt(lenx*lenx+leny*leny); //以上语句计算原点和鼠标点的距离len,当然你可以用point类来算更方便,但我这里保持了初中几何的写法.
pianyi=(lenmax-len)*r;
if (pianyi<0) pianyi=0; //计算偏移量,如果发现为负的话,则让其为0.

接下来画线,问题很简单,把直线换成曲线就是.
http://www.jzxue.com/Files/UpLoadfiles/2007/4/20070417212501_jzxue_com_03.fla
http://www.jzxue.com/Files/Remoteupfile/2007-4/18/20070417212603_jzxue_com_03.swf
前面的代码相同
with (_mc) {
clear();
lineStyle(0, 0x000000, 100);
moveTo(yuandian._x, yuandian._y);
kongzhidian1_x=(yuandian._x+zhongxindian._x)/2-tx;
kongzhidian1_y=(yuandian._y+zhongxindian._y)/2+pianyi/2-ty;
//以上语句就是定位控制点1的坐标,先简单的用前面例1中的算法.
curveTo(kongzhidian1_x,kongzhidian1_y,zhongxindian._x, zhongxindian._y);
kongzhidian2_x=(zhongxindian._x+shubiaodian._x)/2-tx;
kongzhidian2_y=(zhongxindian._y+shubiaodian._y)/2+pianyi/2-ty;
curveTo(kongzhidian2_x,kongzhidian2_y,shubiaodian._x, shubiaodian._y);
//以上语句就是定位控制点2的坐标,先简单的用前面例1中的算法.
}
这样算出来的结果有瑕疵,很明显中心点不是一个圆角,而显现出了棱角的特点,这和软力绳的样子不符合.这时需要回到例1中去分析.这里不去分析贝塞尔曲线的公式,这里简单的把结论说一下.很显然当一条曲线画完后,接着的第二曲线的切线应该和前一个曲线相切,也就是说,第二条曲线的控制点应该与前一条曲线的控制点以及中心点在一条直线上,或者说他们斜率相同.(看图上呈一条直线的3个点)
Flash教程:有趣的简易软力绳教程

OK,到例4中,相关的代码换了一下.
http://www.jzxue.com/Files/Remoteupfile/2007-4/18/20070417213505_jzxue_com_04.swf
http://www.jzxue.com/Files/UpLoadfiles/2007/4/20070417213432_jzxue_com_04.fla
http://space.flash8.net/bbs/attachment.php?aid=321430
http://space.flash8.net/bbs/attachment.php?aid=321431

with (_mc) {
clear();
lineStyle(0, 0x000000, 100);
moveTo(yuandian._x, yuandian._y);
kongzhidian1_x=(yuandian._x+zhongxindian._x)/2-tx*2;
kongzhidian1_y=(yuandian._y+zhongxindian._y)/2+pianyi/2-ty;
//kongzhidian1._x=kongzhidian1_x;
//kongzhidian1._y=kongzhidian1_y;
//lineTo(kongzhidian1_x,kongzhidian1_y);
//moveTo(yuandian._x, yuandian._y);
curveTo(kongzhidian1_x,kongzhidian1_y,zhongxindian._x, zhongxindian._y);
len2_x=zhongxindian._x-shubiaodian._x;
len2_y=zhongxindian._y-shubiaodian._y;
len2=Math.sqrt(len2_x*len2_x+len2_y*len2_y);
lent_x=kongzhidian1_x-zhongxindian._x;
lent_y=kongzhidian1_y-zhongxindian._y;
lent=Math.sqrt(lent_x*lent_x+lent_y*lent_y);
kongzhidian2_x=zhongxindian._x-len2*lent_x/lent*p1;
kongzhidian2_y=zhongxindian._y-len2*lent_y/lent*p1;;
//kongzhidian2._x=kongzhidian2_x;
//kongzhidian2._y=kongzhidian2_y;
//lineTo(kongzhidian2_x,kongzhidian2_y);
//moveTo(zhongxindian._x, zhongxindian._y);
curveTo(kongzhidian2_x,kongzhidian2_y,shubiaodian._x, shubiaodian._y);
}
没时间解释代码了,简单的来说就是延着延长线放置第二个控制点.这样一个简单的软力绳就出来了.大概修整一下相关参数,最后的结果例5.
http://www.jzxue.com/Files/Remoteupfile/2007-4/18/20070417212723_jzxue_com_05.swf
http://www.jzxue.com/Files/UpLoadfiles/2007/4/20070417213702_jzxue_com_05.fla
这是最简单的软力绳,仅仅做到模仿,想体现更复杂的效果的话,请自行研究相关的算法,并设置更多的中心点.

Flash教程:有趣的简易软力绳教程

Flash教程:有趣的简易软力绳教程

9 7 3 1 2 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.