来讲讲:Flash制造关于光的折射和全反射教程
flash是Macromedia公司的一个的flash动画制作软件。我们可以从Macromedia公司的主页上下载flash的试用版。这是一个反应光的折射和反射纪律的flash动画,其效果次要是用编程完成的,人人能够先看一下效果:
点击这里下载源文件
人人能够看得出,全部flash动画大抵由三部分构成:
1、基础元件:反射光芒、折射光芒、法线(与分界面垂值的那一条)、光源、分界面
2、各个角度的显现
3、动画的完成
这三部分中,教程将把重点放在第三部分上,将把全部的编程思绪作具体解说,好了空话少说,如今入手下手吧
1、基础元件的制造
这一步次要是用flash的画图工具完成的反射光芒、折射光芒、法线、分界面的画法是一样的,以是只举一个例子足矣,如画分界面:
1、拔取工具区的线条工具,线条粗细默许,在主场景按住Shifi键向下画一条得当长度的线段。
2、选中线段,右键―转化为元件-影片剪辑,其参数按图中设置,把它转化为影片剪辑
3、双击分界面元件,进进编纂形态,拔取工具栏中的文本工具,在分界面元件的得当地位到场笔墨申明如图
其他的画法是分歧的,分歧的是:
1、法线按物理的画法是用虚线的,这能够在场景的下方属性栏设置,在笔触款式处选择如图
2、折射光芒和反射光芒的注册点选在左两头地位怎样,各元件都画好了吗?上面就给各个元件定名吧,这个定名和转换为元件时的定名感化纷歧样,此次的定名将在剧本里用上。把各元件拖加入景中,分离选中元件,然后选择场景下方的属性-剪辑称号处定名,按中文拼音习气定名吧,如分界面定名为fjm如图
其他的一样定名,反射光芒定名fs,折射光芒定名为zs,法线定名为fx,至于谁人发光的光源,我是用工具栏的矩形工具画的,太丑了,列位应当画得比我好,一样,画好后,选中它,右键―转化为元件-影片剪辑,定名为jg(激光)。大概人人会问,进射光芒呢,别急,这条光芒是用剧本完成得
2、显现文本的制造
这一步扳连到了文本工具里的静态文本和静态文本的用法
1、选中文本工具,此时的文本工具默许下是静态文本的,点击场景中的右上角,在点击处呈现一个文本框、在个中输出“进射角”三字
2、一样选择文本工具,选择场景下方的属性对话框,点击文本范例下拉菜单,会呈现三选项,静态文本、静态文本、输出文本,这里选择静态文本,用来静态显现进射角得数值,在上一步的文本“进射角”后按住左键拉出一个文本框,选中文本框,选择下方的属性,在变量处定名rsj(进射角)如图
最初在静态文本后用静态文本输出单元“度”,基础作法就云云,,以后顺次完成折射角(zsj)、反射角(fsj)、临界角(ljj)的显现文本的制造,效果如图
3、动画的完成
1、实际剖析
这部分次要是剧本了,我们先熟习一些折射定律吧,高中物理告知我们,当一束光芒从光密介质到光疏介质(如从水或玻璃进进氛围),有大概产生全反射(此时只要反射光芒),前提就是光芒在光密介质中的进射角年夜于临界角,(假如不是很分明,可看一下物理教材哦,,我这里基础上只是给出结论),临界的盘算公式sinC=1/n(n为折射率),即C=arcsin(1/n),而光芒在氛围中与法线的夹角i和光芒在介质中与法线的夹角r满意折射定律公式n=sin(i)/sin(r),以是有i=arcsin(n*sin(r),至于别的的一条反射光芒就复杂了,进射角即是反射角,依据能量守恒,进射光的总能量=折射光的能量+反射光的能量,这一点将用他们的通明度(alpha值)反应出来。
2、代码剖析
完全的代码以下
fjm._y=200;
fx._x=250;
zs._x=250;
zs._y=200;
fs._x=250;
fs._y=200;
n=1.5;
onEnterFrame=function(){
jg.onMouseDown=function(){
this.startDrag(true,0,200,500,500);
};
jg.onMouseUp=function(){
this.stopDrag();
};
this.createEmptyMovieClip("mc",100);
mc.lineStyle(2,0xff0000,100);
mc.moveTo(250,200);
x=jg._x;
y=jg._y;
mc.lineTo(x,y);
A=Math.atan2(y-200,x-250);
jg._rotation=A*180/Math.PI+180;
C=Math.asin(1/n);
ljj=Math.round(C*180*10/Math.PI)/10;
if(x<250){
r=A-Math.PI/2;
if(r<C){
i=Math.asin(n*Math.sin(r));
zs._rotation=-90+i*180/Math.PI;
zs._alpha=100-i*60;
}else{
zs._alpha=0;
}
}elseif(x>250){
r=Math.PI/2-A;
if(r<C){
i=&nbs
200610/3386_2.html>200610/3386_2.html>下一页
p;Math.asin(n*Math.sin(r));
zs._rotation=-90-i*180/Math.PI;
zs._alpha=100-i*60;
}else{
zs._alpha=0;
}
}
fs._rotation=180-A*180/Math.PI;
rsj=Math.round(r*180*10/Math.PI)/10;
if(r<C){
zsj=Math.round(i*180*10/Math.PI)/10;
}else{
zsj="已全反射";
}
fsj=Math.round(r*180*10/Math.PI)/10;
fs._alpha=i*60;
};</P> 好了上面入手下手剖析代码怎样写的了,先看一个图
看得出,我是用分界面和法线把场景分红了4个地区,相称于数学里的第一到第四象限,在代码中先作了以下的初始化
fjm._y=200;
fx._x=250;
//以上可厚交点相称于坐标原点为(250,200)
//折射光芒、反射光芒的x、y坐标分离在250,200(即坐标原点)
zs._x=250;
zs._y=200;
fs._x=250;
fs._y=200;
由以上的初始化可知,折射光芒、反射光芒的注册点必需在右边(看元件制造)同时由图可知,进射光芒只能在3、4象限,意味着光源只能在3、4象限挪动,以是光源(激光jg)元件只能在立体以下拖动,摆布最好不要进场景,代码为
this.startDrag(true,0,200,500,500);
接上去就要办理进射角和折射角的干系,仍是再看一个图
这个截图中进射光芒是在第三象限,对应的折射光芒在第一象限,而flash的扭转用其属性_rotation完成,这个属性暗示的是指定影片剪辑相对其原始偏向的扭转水平,以度为单元。从0到180的值暗示顺时针偏向扭转;从0到-180的值暗示逆时针偏向扭转。以是起首要取得进射光芒的扭转角A,可我们下面的元件中没有进射光芒呀,怎样来的,实践上是用以下代码画的
this.createEmptyMovieClip("mc",100);
mc.lineStyle(2,0xff0000,100);
mc.moveTo(250,200);
x=jg._x;
y=jg._y;
mc.lineTo(x,y);
那末,A就能够用反三角函数取得代码为
A=Math.atan2(y-200,x-250);
从图中可知,其真实的进射角为r=A-Math.PI/2;其折射角i=Math.asin(1.5*Math.sin(r))从图中可知折射光芒扭转的角度应当为-90+i*180/Math.PI,响应代码为
if(x<250){
r=A-Math.PI/2;
if(r<C){
i=Math.asin(n*Math.sin(r));
zs._rotation=-90+i*180/Math.PI;
zs._alpha=100-i*60;
}else{
zs._alpha=0;
}
人人大概会问,zs._alpha=100-i*60;这一句的算法是怎样的,依据物理纪律,当折射角越年夜,其能量越小,当折射为90度时产生全反射,对应的折射光芒能量为零,在动画中反应为其_alpha值愈来愈小,按实践盘算为zs._alpha=100-i*63.7的,但思索实践效果,算了,就如许吧。反之反射光芒能量愈来愈年夜,当产生全反射时,能量最年夜,即是进射光的强度,用代码fs._alpha=i*60完成,怎样,分明吗?
剩下的是当进射光芒在第四象限时的了,也看一下相似的图
对应代码以下
}elseif(x>250){
r=Math.PI/2-A;
if(r<C){
i=Math.asin(n*Math.sin(r));
zs._rotation=-90-i*180/Math.PI;
zs._alpha=100-i*60;
}else{
zs._alpha=0;
}
}
最初办理最复杂的反射光芒的扭转成绩,实在由倒数第三个图很简单得其代码为
fs._rotation=180-A*180/Math.PI;</b>
使用Flash创作的各个内容单元称为应用程序,即使它们可能只是很简单的动画。您也可以通过添加图片、声音、视频和特殊效果,构建包含丰富媒体的Flash应用程序。 一个物体从一个角(关键祯1)移动到另一个角(关键祯2)。然后tweening在关键祯之间填充祯,从而使物体可以在屏幕上优雅地运动。 FLASH的优点~你用眼睛所看到的东西~都能用它来实现~一点不夸张~高楼大厦-花草树木-高山流水-天空白云-阿猫阿狗-一切活的东西都可以容入到FLASH里面 它包含了下列常见的形式之一或者几种的组合:流媒体、声音、Flash、以及Java、Javascript、DHTML等程序设计语言。 Flash也可以合成简单的JavaScript函数。如果你学过某种脚本语言如JavaScript或者Macromedia的Director Lingo,你会知道这有点令人畏缩。 在Web页面上使用声音是可能的,但是在精确的时间播放声音几乎是不可能的。Flash通过把声音放入时间期限内解决了这个问题,因此你现在可以把声音连接到动画的特定部分或者某个用户交互过程。 现在FLASH不是也可以调用后台数据库了么~在过几年没准可以通过FLASH来实现远程控制呢~(有点假了~呵呵)我了解的FLASH优点应该就是第一段那些了~缺点暂时想不出太多了~ 矢量图形相对于位图的另一个优势是可以随意缩放的能力。这是对动画进程的奖赏,对用户来说也是一个很酷的特征。在Flash之前,Web上没有这种功能。 向量图有一个特点,就是放大后的图像是不会改变的. 点阵图 向量图Flash的应用,还有再不断在完善的Action Script脚本语言。
页:
[1]