Flash面向对象程式设计的演变

2008-04-02 10:54:01来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  

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的时间轴里去.

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 关于Mediaplayback组件的快进/快退按钮

下一篇: Flash实用编程四---下雪动画的制作