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

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

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



  2.对像区域函数

  区域函数意思就是将原来放在主影片时间轴的全域函数搬到对象里,即放在Movie Clip ball的时间轴里.

  研发步骤:

  选择主影片图层script第一至第三帧,按右键选”Cut Frames”,如图所示.

  



  



  编辑元件库里Movie Clip ball,插入帧至3个,增加图层,选择头3个帧,按右键选”Paste Frames”,如图所示.

  



  



  编辑第1帧的代码,改为以下程式代码:

  



  

  

  

  

  

  
程式代码:


  
function initBall()

  {

  var speed = 10;

  var dir = random(360)*Math.PI/180;

  xdir = Math.cos(dir)*speed;

  ydir = Math.sin(dir)*speed;

  }

  function moveBall()

  {

  var x = _x;

  var y = _y;

  x = xdir;

  y = ydir;

  if ((x<0 and xdir<0) or (x>292 and xdir>0))

  {

  xdir *= -1;

  x = (x<0) ? 0 : 292;

  }

  else if ((y<0 and ydir<0) or (y>292 and ydir>0))

  {

  ydir *= -1;

  y = (y<0) ? 0 : 292;

  }

  _x = x;

  _y = y;

  }

  initBall();


  



  程式修改主要是删去for循环,连同将路径删去(自己不用路径).修改后能够测试影片.

  特点分析:

  区域函数和全域函数的不同之外是:

  1.程式和图像放在一起,封装性改善了,容易拷贝到另一个地方使用.

  2.没有路径考虑,在别的Movie Clip里都能够使用.

  但是,区域函数有一个致命问题:虽然区域函数是写在Movie Clip元件里,但是每个Movie Clip实体都会有一套区域函数在自己时间轴里.他们的区域函数其实是完全相同,这么多份区域函数会严重浪费内存.

  3.原型(Prototype)扩展

  由于任何舞台上的Movie Clip都是MovieClip类的具体表现(唯一可视化的实体),所以在MovieClip类直接加入关于随机移动的方法,任何粒子实体就会有随机移动的方法供调用,避免浪费内存.

  原型是ActionScript 1.0中用来建立继承或将自定属性和方法增加到对象中之用.利用关键字”prototype”,为MovieClip类增加两个方法,分别是initBall()和moveBall().

  研发步骤:

  基于上面的源程式的修改.主影片时间轴只保留第一帧,新增回图层script,加入扩充MovieClip类方法的程式代码(能够从Movie Clip ball第一帧复制):

  



  

  

  

  

  

  
程式代码:


  
MovieClip.prototype.initBall = function()

  {

  var speed = 10;

  var dir = random(360)*Math.PI/180;

  this.xdir = Math.cos(dir)*speed;

  this.ydir = Math.sin(dir)*speed;

  };

  MovieClip.prototype.moveBall=function()

  {

  var x = this._x;

  var y = this._y;

  x =this. xdir;

  y = this.ydir;

  if ((x<0 and this.xdir<0) or (x>292 and this.xdir>0))

  {

  this.xdir *= -1;

  x = (x<0) ? 0 : 292;

  }

  else if ((y<0 and this.ydir<0) or (y>292 and this.ydir>0))

  {

  this.ydir *= -1;

  y = (y<0) ? 0 : 292;

  }

  this._x = x;

  this._y = y;

  }


  



  程式代码要修改的地方不多,只是加上关键字”this”,代表指向自己的属性.

  编辑元件库里Movie Clip ball,只保留第一帧,将程式代码改成:

  



  

  

  

  

  

  
程式代码:


  
initBall();

  this.onEnterFrame=moveBall;


  



  onEnterFrame是Movie Clip其中一个事件,他会根据影片帧速率(Frame Rate)不停执行程式.修改后能够测试影片.

  特点分析:

  原型扩展虽然避免了重复区域函数浪费内存,但是由于他直接在MovieClip类加入关于随机移动等方法,污染了MovieClip类,因为任何舞台上Movie Clip实体,就算不是粒子,都会有这两个方法.

  4.封装成组件

  针对原型扩展缺点,正确方法是建立一个新对象(例如:粒子类),并继承MovieClip类.这个做法,在Flash MX时,就是所谓以ActionScript 1.0来进行面向对象程式设计的做法.其实这做法跟研发Flash MX组件是没有分别,换句话说,研发Flash MX组件就是ActionScript 1.0面向对象程式设计的常见情况.

标签:

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

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

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