Flash - ActionScript编程制作物理课件实例教程2012 下载本文

Flash ActionScript编程制作物理课件实例教程

【例7-2说明】

可与例5-3对比,体会使用for循环和使用帧循环的区别。

【例7-3:礼花爆炸效果】

1、新建Flash文档,大小设为:550*400象素。

2、新建影片剪辑元件:ball,在中心十字处绘制一直径10象素的小球。将元件拖入主场景(0,0)处,实例名称设为ball_mc。

3、新建影片剪辑元件:dot,在中心十字处绘制一直径2象素的圆。将元件拖入主场景(0,0)处,实例名称设为dot_mc。

4、新建两个按钮,分别写入“碎块数增加”和“碎块数减少”。将元件拖入主场景,实例名称分别设为:num_add_btn和num_sub_btn。

5、在主场景新建一个普通文本,写入:“碎块数:”。新建一个动态文本,变量处填入:block_num。

6、新建action层,在action层第一帧写入ActionScript: var block_num:Number = 6; var v_out:Number = 5; var a:Number = 0.2; var t:Number;

var depth:Number = 1; //初始变量赋值 var i:Number; var vx:Number; var vy:Number; //中间变量定义

num_add_btn.onRelease = function() { //小球个数增加按钮响应 if (block_num<=15) { block_num++; } gotoAndPlay(2); };

num_sub_btn.onRelease = function() { //小球个数减少按钮响应 if (block_num>=3) { block_num--; } gotoAndPlay(2); };

第 45 页 共 79 页

Flash ActionScript编程制作物理课件实例教程

7、在action层第二帧写入ActionScript: for (i=1; i<=depth; i++) { //删除轨迹妙点 removeMovieClip(this[\}

depth = 1;

for (i=0; i<=block_num; i++) { //删除原有小球 removeMovieClip(this[\}

for (i=0; i

8、在action层第三帧写入ActionScript: for (i=0; i

9、在action层第四帧写入ActionScript: t++;

gotoAndPlay(3);

10、用普通帧补足其他图层,保存,发布。

【例7-3说明】

假设礼花在空中爆炸后,碎片均匀散开,本例中将其简化为同一平面内从圆心均匀角度、相同速度射出的小球,并且描绘小球的轨迹。

使用duplicateMovieClip()函数复制出的影片剪辑,可以使用removeMovieClip()函数删除,本例中重置小球时使用此函数删除上次的轨迹曲线和上次复制出的小球(避免碎片数减少时小球仍然留在场景内)。

第 46 页 共 79 页

Flash ActionScript编程制作物理课件实例教程

【例7-4:波动方程】

1、新建Flash文档,大小设为550*400象素。

2、新建影片剪辑元件:ball,在元件中心十字处绘制直径10象素的小球。将元件拖至场景(0,0)处,实例名称设为ball_mc。

3、新建action层,在action层的第一帧写入ActionSctipt: var w:Number = 0.1;

//每个小球振动的圆频率 var w2:Number = 0.1; //波中每个小球的延迟 var l:Number = 100; var t:Number = 0;

for (var i:Number = 1; i<55; i++) { duplicateMovieClip(\ this[\ this[\}

4、在action层第二帧写入ActionScript: for (i=1; i<55; i++) { this[\}

5、在action层第三帧写入ActionScript: t++;

gotoAndPlay(2); 6、保存,发布。

【例7-5:波的叠加】

1、在例7-4基础上继续进行修改。

2、在action第一帧追加ActionScript: var w_r:Number = 0.15; var w_r2:Number = 0.25; var l_r:Number = 50;

3、将action第二帧ActionScript改为: i = 1;

while (i<55) { this[\ i++; }

4、另存为例7-5,发布。

第 47 页 共 79 页

Flash ActionScript编程制作物理课件实例教程

【例7-5说明】

本例中将第二帧中的for循环换成了while循环,效果是等价的,同学们可以比较一下这两种循环写法的区别。while循环的一般形式为: while(条件){ 语句;

}

do…while循环的一般形式为: do{ 语句

}while(条件);

注意加了灰底的i++; 是必须的,如果没有的话while循环将会一直循环下去,导致flash动画的运行速

度非常缓慢。Flash播放器将会因此而报警提示(如图)。

while循环如果使用类似for循环中i这样的循环变量控制循环次数的话,需要将循环变量的修改作为语句中的一部分,因此有时不如for循环方便。但是在有事无需单独的循环变量时,或者循环次数难于预先估计时,while和do…while循环就非常的方便了。例7-2中绘制的部分曲线已经在flash显示范围之外了(y>400),所以可以将程序修改为例7-6: var vx:Number = 5; var vy:Number = 10; var a:Number = 0.2; var i:Number = 0; do { i++; duplicateMovieClip(\ this[\ this[\} while (this[\

【其他和循环相关的一些内容】

for(复述变量in对象){动作}

for?in是很有趣的一种循环机制,for?in循环不需要条件语句,这种循环利用一个查找—替换关键字的机制进行工作。

例7-7动画中有10个小球,实例名分别是clip_1、Clip_2??,我们当然可以使用字符串表达式计算实例名称,也可以使用for?in循环,这在实例名不知道或者实例名难以用一个字符串表达式表示时特别有用处。不过,for?in循环只能用于对象和数组,并且不是对元素的所有属性都可以这样进行。

第 48 页 共 79 页