正在阅读:Flash特效制作常用的源代码大放送Flash特效制作常用的源代码大放送

2007-04-03 10:16 出处:PConline 作者:佚名 责任编辑:chenzhenjia

  随机输出1到100而不从复的语句

  以下是引用片段:

  seq=newArray(100);

  pArray=newArray(100);

  functionmakeRandom(){

  for(i=1;i<=100;i++){

  seq[i]="A";

  }

  }

  functionmRandom(){

  while(true){

  n=int(random(100))+1;

  if(seq[n]=="A"){

  seq[n]="0";

  break;

  }

  }

  return(n);

  }

  functionrArray(){

  for(i=1;i<=100;i++){

  pArray[i]=mRandom();

  trace(pArray[i]);

  }

  }

  stop();

  偷梁换柱

  我们可以用这样一个技巧,在某些函数外部加一些东西而不需要了解函数的代码~~

  比如,假如当前有很多mc 覆盖了onEnterFrame函数,我们可以这样了解那些在_root下的mc 的onEnterFrame函

  数是以什么顺序执行的:

  代码:

  以下是引用片段:

  for(variin_root){

  if(_root[i].onEnterFrame!=null){//如果这个Object实现了onEnterFrame接口的话

  _root[i].oldFunc=_root[i].onEnterFrame;//首先保存原来的onEnterFrame的句柄

  _root[i].onEnterFrame=function(){//然后开始替换了~~加上一层壳~~

  trace(this+":onEnterFrameCalled.");

  this.oldFunc();//我们用保留的句柄调用原来的函数

  trace(this+":onEnterFrameReturned.");

  }

  }

  }

  如果要取消这些附加的操作:

  代码:

  以下是引用片段:

  for(variin_root){

  if(_root[i].oldFunc!=null){//如果发现改过得痕迹

  _root[i].onEnterFrame=_root[i].oldFunc;

  delete(oldFunc);

  }

  }

  呵呵这些操作的关键在于 Flash里面的引用机制:

  所有函数名都是引用,而函数本身是浮在数据的海洋里面的。如果没有任何变量引用他,他就会被回收。如果有,

  他就不会被回收。所以有着样一个有趣的事情:delete函数不会删掉任何东西,除了要求删掉的那个名字:(和java

  机制相似,而和C不同)

  以下是引用片段:

  a=function(){trace("Functionacalled");}

  b=a;

  delete(a);//除了a这个名字被删掉以外,没有任何事情发生

  b();

  函数通过this得到其调用者的实例。

  MovieClipPlus.as

  定义了一些简单的MC操作

  //画点:由于Flash没有画点,那我们就画短线

  以下是引用片段:

  MovieClip.prototype.point=OxMovieClipPoint;

  functionOxMovieClipPoint(x,y){

  this.moveTo(x,y);

  this.lineTo(x+1,y);

  }

  //画矩形,左上角x1,y1 右下角x2,y2, 颜色rgb, 不透明度alpha

  以下是引用片段:

  MovieClip.prototype.rect=OxMovieClipRect;

  functionOxMovieClipRect(x1,y1,x2,y2,rgb,alpha){

  this.beginFill(rgb,alpha);

  this.moveTo(x1,y1);

  this.lineTo(x1,y2);

  this.lineTo(x2,y2);

  this.lineTo(x2,y1);

  this.lineTo(x1,y1);

  this.endFill();

  }

  //画圆:这么bt的冬冬当然不是我写的,作者素JodyKeating

  //圆心x,y,半径r

  MovieClip.prototype.circle=OxMovieClipCircle;

  functionOxMovieClipCircle(x,y,r){

  vara=r*0.414213562;

  varb=r*0.707106781;

  this.moveTo(x+r,y);

  this.curveTo(x+r,y-a,x+b,y-b);

  this.curveTo(x+a,y-r,x,y-r);

  this.curveTo(x-a,y-r,x-b,y-b);

  this.curveTo(x-r,y-a,x-r,y);

  this.curveTo(x-r,y+a,x-b,y+b);

  this.curveTo(x-a,y+r,x,y+r);

  this.curveTo(x+a,y+r,x+b,y+b);

  this.curveTo(x+r,y+a,x+r,y);

  }

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品