flash as 制作百变图

作者:袖梨 2022-07-02

看到这个动画,不禁让人想到南迁的大雁,一会儿排成"人"字形,一会儿排成"一"字形的壮观场面

思路:1.createEmptyMovieClip(MC),位于舞台中央,使之不断旋转;


2.用MC作载体,复制出num(150)个(p0~p149)影片,全部都依附于MC上;

3.AS中共有2个函数(function),分别为Change()和getShape():
Change():首先,获得一个随机图形编号(shape),然后为所有MC["p"+i]点设置大小及透明度,再调用getShape()获得该点的目标坐标;


getShape():根据shape编号,返回组成该图形的目标坐标;

4.用数组PS[0]存X坐标,PS[1]存Y坐标;

5.MC["p"+i].onEnterFrame:"跑"向各自的目标点.

步骤1:

   
绘制10*10的圆点,保存为影片剪辑,连接—>导出—>标志符"p"

步骤2:

加入AS代码:

_root.createEmptyMovieClip("MC",
10);

MC._x = 200;

MC._y = 150;

MC.onEnterFrame = function() {

this._rotation += 2;

};

var num:Number = 150;
//圆点p的个数

for (i=0; i
MC.attachMovie("p", "p"+i, i);

}

var PS:Array = new
Array(2);
//PS[0]存储X坐标,PS[1]存储Y坐标.

_root.onMouseDown = function()
{

Change();
//鼠标点击后变换图形


};

function
Change() {

var shape =
int(Math.random()*2);
//获得随机图形

for (i=0; i
  p =
MC["p"+i];
  p._xscale
= p._yscale=50+Math.random()*50;

  p._alpha =
50+Math.random()*50;

  getShape(shape);

  p.tox = PS[0];

  p.toy =
PS[1];
//调用getShape()函数后,获得MC["p"+i]的X,Y目标坐标

  p.onEnterFrame =
function() {
   this._x
+= 0.1*(this.tox-this._x);

   this._y +=
0.1*(this.toy-this._y);
//点MC["p"+i] 向目标坐标移动,
移动步长为0.1*(目标坐标 - 当前坐标);

//越接近目标,步长越小。最终,当前坐标=目标坐标,不再移动。


  };

}

}

function
getShape(shape) {
//用shape的值作为判断图形的依据

var R:Number = 100;

var angle:Number =
Math.random()*360*Math.PI/180;

switch (shape)
{
//====================直线======================


case 0 :

  PS[0] = -R+random(R*2);

  PS[1] = 0;

  break;
//====================圆======================


case 1 :

  PS[0] =
R*Math.cos(angle);

  PS[1] =
R*Math.sin(angle);

  break;

}

}


可变化的图形越多,这个程序的观赏性越强

下面补充一些图形,把他们加入switch语句中即可:
var R:Number = 100;

var angle:Number = Math.random()*360*Math.PI/180;

十字

  switch (int(Math.random()*2))
{

  case 0 :

   PS[0] =
-R+random(R*2);

   PS[1] =
0;

   break;

  case 1 :

   PS[0] =
0;

   PS[1] =
-R+random(R*2);

  }


三棱形
  var
r = R*Math.cos(3*angle);

  PS[0] =
r*Math.cos(angle);

  PS[1] =
r*Math.sin(angle);


蝶形

  PS[0] =
R*Math.cos(angle);

  PS[1] =
R*Math.sin(2*angle);


正方形

  RanLine = int(random(4));

  switch (RanLine) {

  case 0 :

   PS[0] =
-R+random(R*2);

   PS[1] =
-R;

   break;

  case 1 :

   PS[0] =
-R;

   PS[1] =
-R+random(R*2);

   break;

  case 2 :

   PS[0] =
R-random(R*2);

   PS[1] =
R;

   break;

  case 3 :

   PS[0] =
R;

   PS[1] =
-R+random(R*2);

  }


同心圆

  lary = random(4);

  PS[0] =
lary*40*Math.cos(angle);

  PS[1] =
lary*40*Math.sin(angle);


螺旋形
  A
= 3;

  r = A*angle;

  PS[0] = 7*r*Math.cos(r);

  PS[1] = 7*r*Math.sin(r);


心形
  var
r = R*Math.cos(angle)-R;

  PS[0] =
r*Math.cos(angle);

  PS[1] = r*Math.sin(angle);


V字
  PS[0]
= -R+random(2*R);

  PS[1] = -R+Math.abs(PS[0]);


Flash充电:switch语句

1.作用:Switch语句代替if/else的嵌套结构,解决多重选择的问题,让语法更清楚简单。


2.说明:在switch语句中,我们可以将case-break视为次单元。除了default之外,每个次单元的
开头都是case,结尾为break,break的作用是跳离本次switch语句。如果某个case次单元没有加上break,则在执行该区段语句后,
继续往下一个case次单元执行。


3.语法:

switch(键值){

case 条件值1:

  //分段1语句

  break;

case 条件值2:

  //分段2语句

  break;

case 条件值N:

  //分段N语句

  break;
default :

  //默认语句

}

例1:请改变i的设定看看有什么结果?
var i
= 2;

switch (i) {

case 1 :

trace("i=1");

break;

case 2 :

trace("i=2");

break;

case 3 :

case 4 :

trace("i=3 or i=4");

break;

default :

trace("i is not 1,2,3,4");

}

例2:获得键盘键值实例

var listenerObj:Object = new Object();

listenerObj.onKeyDown = function() {

switch (String.fromCharCode(Key.getAscii()))
{

case "A" :

trace("you pressed A");

break;

case "a" :

trace("you pressed a");

break;

case "E" :

case "e" :

trace("you pressed E or e");

break;

case "I" :

case "i" :

trace("you pressed I or i");

break;

default :

trace("you pressed some other key");

break;

}

};

Key.addListener(listenerObj);

相关文章

精彩推荐