1.全域函数
研发步骤:
先准备好一个Movie Clip ball代表粒子,大量地将他拖到舞台上,输入这些Movie Clip ball实体名称,例如由ball0到ball14.


以美工角度加上时间轴的思考模式,Movie Clip ball会直接在主影片的时间轴上受控制,意思是程式会放在主影片的时间轴时,路径跟任何Movie Clip ball实体是一致的,而这种在主影片的时间轴里程式,是全域程式,因为由_root能够直接访问到.
由于粒子要不停移动,为了使负责移动的程式不停执行,时间轴必须循环播放,不停经过有程式的帧,让粒子移动.

对ActionScript认识较多的美工,会将初始化和移动的程式写成函数,否则可能只是直接地在第1和2帧加入程式.这些函数,路径是_root,视为全域函数;直到现在,大部分Flash研发人员,仍然是以全域函数方法研发应用程式或程式设计互动效果.
良好的程式设计习惯上, 函数是放在第1帧,在图层script加入程式代码, initBall()是初始化函数,计算每个粒子开始时的移动角度,然后分成x 速度和y速度:
| 程式代码: |
function initBall() { var speed = 10; for (var i = 0; i { var dir = random(360)*Math.PI/180; this["ball" i].xdir = Math.cos(dir)*speed; this["ball" i].ydir = Math.sin(dir)*speed; } } |
继续加入程式代码,程式设计移动程式的函数:
| 程式代码: |
function moveBall() { for (var i = 0; i { //利用共用子表达式删除增加执行速度 var ball = this["ball" i]; var x = ball._x; var y = ball._y; x = ball.xdir; y = ball.ydir; if ((x<0 and ball.xdir<0) or (x>292 and ball.xdir>0)) { //碰到边界便能会反弹 ball.xdir *= -1; //粒子不可穿过边界,所以极限的位置是边界大小 x = (x<0) ? 0 : 292; } else if ((y<0 and ball.ydir<0) or (y>292 and ball.ydir>0)) { //碰到边界便能会反弹 ball.ydir *= -1; //粒子不可穿过边界,所以极限的位置是边界大小 y = (y<0) ? 0 : 292; } ball._x = x; ball._y = y; } } |
在第一帧加入变量ballno,代表粒子总数;最后,调用initBall()函数进行初始化,继续加入程式代码.
| 程式代码: |
ballno =15; initBall(); |
在第二帧加入程式代码,调用moveBall()函数移动粒子:
| 程式代码: |
moveBall(); |
在第三帧加入程式代码,跳到第二帧循环播放,让moveBall()函数不停地被调用:
| 程式代码: |
gotoAndPlay(2); |
这个以全域函数编写的粒子运动系统完成,能够测试影片.
特点分析:
全域函数是最容易学习的程式设计技巧,但他有以下的三个问题:
1.面向对象成份很低
在程式设计中,涉及的面向对象概念很少,在图像使用上则达到重用需要(任何粒子实体都是来自同一个Movie Clip元件).
2.缺乏封装性
全域函数将程式代码和图像分离,当需要在别的专案中重用时,必须小心抽出所需的程式代码和图像,封装性完全缺乏.
3.留意Movie Clip路径
全域函数直接控制Movie Clip,假设Movie Clip和全域函数都是在同一个时间轴中(例如:主影片),没有路径问题;但是当受控制Movie Clip是在另一个Movie Clip里,全域函数就要修改受控制Movie Clip的路径,或将全域函数搬到那Movie Clip的时间轴里去.
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



