• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>AS 应用>文章内容
  • AS功能代码教程:百变图(as2.0)
  • 来源:大师之家 作者:FL基理大师 2007-11-19 【
点击即变换形状:
 

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

思路:
1.createEmptyMovieClip(MC),位于舞台中央,使之不断旋转;
2.用MC作为载体,复制出num(150)个p(0~149)影片,全部都依附于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<num; 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() {
 shape = int(Math.random()*2);
//获得随机图形
 for (i=0; i<num; 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 size:Number = 100;
 var angle:Number = Math.random()*360*Math.PI/180;
 switch (shape) {
//====================直线======================
 case 0 :
  PS[0] = -size+random(size*2);
  PS[1] = 0;
  break;
//====================圆======================
 case 1 :
  PS[0] = size*Math.cos(angle);
  PS[1] = size*Math.sin(angle);
  break;
 }
}

可变化的图形越多,这个程序的观赏性越强,下面补充一些图形,把他们加入switch语句中即可:

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

十字
  switch (int(Math.random()*2)) {
  case 0 :
   PS[0] = -size+random(size*2);
   PS[1] = 0;
   break;
  case 1 :
   PS[0] = 0;
   PS[1] = -size+random(size*2);
  }

三棱形
  r = size*Math.cos(3*angle);
  PS[0] = r*Math.cos(angle);
  PS[1] = r*Math.sin(angle);

蝶形
  PS[0] = size*Math.cos(angle);
  PS[1] = size*Math.sin(2*angle);

正方形
  rectangle = int(random(4));
  switch (rectangle) {
  case 0 :
   PS[0] = -size+random(size*2);
   PS[1] = -size;
   break;
  case 1 :
   PS[0] = -size;
   PS[1] = -size+random(size*2);
   break;
  case 2 :
   PS[0] = size-random(size*2);
   PS[1] = size;
   break;
  case 3 :
   PS[0] = size;
   PS[1] = -size+random(size*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 = size*Math.cos(angle)-size;
  PS[0] = r*Math.cos(angle);
  PS[1] = r*Math.sin(angle);

V字
  PS[0] = -size+random(2*size);
  PS[1] = -size+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);




上一篇:AS3实现Mic(麦克风)声音的波形显示   下一篇:下雨效果(附原码)(as2.0)
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)


FLASH源文件

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)