AS 功能代码教程

两点间距离
Math.sqrt(Math.pow((p1._x-p2._x),2)+Math.pow((p1._y-p2._y),2))
由这个公式可以推导出某点与原点距离公式:
因为原点坐标为(0,0),所以公式变形如下
Math.sqrt(p1._x * p1._x + p1._y * p1._y)
下面我们就来运用这两个公式来制作一些效果
实例一: 旋转指针
思路:
求一个夹角的θ方法很多如:
distance.jpg
正弦函数 sinθ=y/r
余弦函数 cosθ=x/r
正切函数 tanθ=y/x
余切函数 cotθ=x/y
正割函数 secθ=r/x
余割函数 cscθ=r/y
这些三角函数都可以求出同一个夹角θ
在本实例中只使用 atan 和 acos 而没有使用其它三角函数是因为他们的返回值都是一个任意数字,而其它函数的返回值均为限定的数字。
步骤一:
    绘制一指针,保存为影片剪辑,注册点在指针根部,实例名为"pointer"

步骤二:
在第一帧加入AS代码(正切函数):
pointer.onMouseMove = function() {
var dx = _xmouse-this._x;
var dy = _ymouse-this._y;
var theta = Math.atan2(dy, dx);
//使用正切函数求出夹角
this._rotation = theta/Math.PI*180;
//将弧度转换为角度
};

在第一帧加入AS代码(反余弦函数):
pointer.onMouseMove = function() {
var dx = _xmouse-this._x;
var dy = _ymouse-this._y;
var r = Math.sqrt(dx*dx+dy*dy);
//r为点与鼠标的直线距离,这里也是斜边r
var theta = Math.acos(dx/r)*Math.abs(dy)/dy;
//使用反余弦函数求出夹角
this._rotation = theta/Math.PI*180;
//将弧度转换为角度
};
实例二: 泡泡效果
思路:
通过判断鼠标的移动距离改变复制出泡泡的大小,移动得越远,泡泡越大

步骤一:
    绘制泡泡,保存为影片剪辑,连接—>导出—>标志符"bubble"
步骤二:
在第一帧加入AS代码:
var n:Number = 0;
var old_x, old_y;
//这两个全局变量用于存储前一次的鼠标位置
_root.onMouseMove = function() {
var dx = _xmouse-old_x;
var dy = _ymouse-old_y;
var distance = Math.sqrt(dx*dx+dy*dy);
//求出本次鼠标位置和前一次鼠标位置的距离
var p = attachMovie("bubble", "b"+n, n);
p._x = _xmouse;
p._y = _ymouse;
p._width = p._height=distance;
//用得出的距离为泡泡设置尺寸
p.onEnterFrame = function() {
  if (this._alpha>0) {
   this._xscale = this._yscale += 5;
   this._alpha -= 5;
   //做一个泡泡变大消失的效果
  } else {
   delete this.onEnterFrame;
   removeMovieClip(this);
   //泡泡看不见后,别忘了删除他的影片和函数,否则会卡哟
  }
};
old_x = _xmouse;
old_y = _ymouse;
//保存本次鼠标位置作为前一次鼠标的位置
n++;
};

实例三: 辐射点效果
思路:
1.把点以行列的形式平均分配到舞台上
2.用点间距离公式,判断每个点与鼠标的距离
3.缩放值 = 距离 - 120

4.当120<距离<220时,则缩放值开始变小[100~0],表现为向内开始变小
5.当距离<120时,则缩放值小于0,表现为向内开始变大,开始走向负数

6.当距离为0时,则缩放值为 -120,表现为鼠标中心位置上较大的那些圆
步骤一:
    绘制一黑点,尺寸为20*20,保存为影片剪辑,
    注册点在中心,连接—>导出—>标志符"dot"
步骤二:
var size = 20;
//黑点的大小
var Colum = Math.floor(Stage.width/size);
var Row = Math.floor(Stage.height/size);
for (var i = 0; i<Colum; i++){
for (var j = 0; j<Row; j++){
  var p = _root.attachMovie("dot", "d"+(i*Row+j), i*Row+j);
  p._x = (size/2)+i*size;
  p._y = (size/2)+j*size;
  //以行列的形式把点平均分配到舞台上
  p.onMouseMove = function() {
   var dx = this._x-_xmouse;
   var dy = this._y-_ymouse;
   var distance = Math.sqrt(dx*dx+dy*dy);
   var d = distance-120;
   //如果距离大于220,则不进行缩放,距离小于220则为进行缩放
   if (d>100) {
    d = 100;
   }
   //或 d = d>100 ? 100 : d;
   this._xscale = this._yscale=d;
  };
}
}
实例四: 狡猾的小球
先复习一下圆的参数方程:x坐标 = R*cosθ+m; y坐标 = R*sinθ+n
根据正弦函数 sinθ=y/r 和 余弦函数 cosθ=x/r推出圆的参数方程为:
x坐标 = R*(x/r)+m; y坐标 = R*(y/r)+n 其中(m,n)为原点坐标。
思路:
1.使用变型的圆参数方程: x= R*(x/r)+m; y= R*(y/r)+n
2.为了让小球躲得更远可以加入新圆心坐标dif_x, dif_y
3.得出球的新位置 =球的初始位置—(圆心位置+圆上的位置)
步骤一:
    绘制一黑点,尺寸为20*20,保存为影片剪辑,
    注册点在中心,连接—>导出—>标志符"dot"
步骤二:
在第一帧加入AS代码:
var size = 30;
//比点的尺寸大出10像素作为行列间距
var Colum = Math.floor(Stage.width/size)-2;
var Row = Math.floor(Stage.height/size)-2;
//行数列数减2,目的是在周围空出2行
var Max = 1000;
//反映及影响圆半径的常量
for (var i = 0; i<Colum; i++){
for (var j = 0; j<Row; j++){
  var p = _root.attachMovie("dot", "d"+(i*Row+j), i*Row+j);
  p._x = p.oldx=20+(size/2)+i*size;
  p._y = p.oldy=20+(size/2)+j*size;
  //以行列的形式把点平均分配到舞台上,同时保存初始位置为oldx,oldy
  p.onEnterFrame = function() {
   var dx = _xmouse-this._x;
   var dy = _ymouse-this._y;
   var r = Math.sqrt(dx*dx+dy*dy);
   //r为点与鼠标的直线距离,这里也是斜边r
   var Circle_x = (dx/r)*Max/r;
   var Circle_y = (dy/r)*Max/r;
   //计算出该点在圆上的位置,Max/r为半径,所以r越小半径越大
   var dif_x = (this.oldx-this._x)/2;
   var dif_y = (this.oldy-this._y)/2;
   //以球的新位置与初始位置之差为新的圆心
   this._x = this.oldx-(dif_x+Circle_x);
   this._y = this.oldy-(dif_y+Circle_y);
   //得出球的新位置=球的初始位置—(圆心位置+圆上的位置)
   //之所以减去(圆心位置+圆上的位置): 让小球位置与鼠标位置相反
  };
}
}

时间: 2024-12-29 23:02:56

AS 功能代码教程的相关文章

[AS功能代码教程04] 进阶三角函数

在AS 03教程中,我们介绍了关于三角函数基础应用 现在为上次课的内容加以补充和发展 复习一下画圆的方法:x坐标cos(n),y坐标sin(n); n 从0-360的弧度 一.绘制椭圆 对比一下,我们只是把画圆方法中 R ,一分为二. 分成了 W 和 H 分别控制椭圆的宽和高. _root.createEmptyMovieClip("MC", 1); MC._x = 200; MC._y = 200; //创建一个空影片剪辑,放在舞台中央作为画线容器 var W = 50; var H

AS功能代码教程:鱼眼放大镜

下面我们先用图解法来解释一下本实例 思路: 1.鱼眼放大镜是于若干个渐小的圆组成的: 2.使每个圆都去遮罩一个渐大的图片来实现,里面的小圆遮罩大较图片,外面的大圆遮罩较小图片: 3.还有最后一个重要的步骤是"对焦",由于图片是渐大的,所以鼠标所在的一个点位对于小图来说也许是头部,而对于大图来说也许都到了场外,那么显示出的效果就错了.使用"对焦"可以让鼠标指在小图上是头部,大图上也要是头部,这么说给大家一个印象,下面请看图解.   1.首先在舞台上放入两个影片剪辑,其

AS 功能代码教程14] 鱼眼放大镜

本节加了星号,借黑羽的话:"本节的内容稍微有些难度,如果不明白,可以暂时不看,待日后碰到类似问题时,再来查阅" 下面我们先用图解法来解释一下本实例 思路: 1.鱼眼放大镜是于若干个渐小的圆组成的; 2.使每个圆都去遮罩一个渐大的图片来实现,里面的小圆遮罩大较图片,外面的大圆遮罩较小图片; 3.还有最后一个重要的步骤是"对焦",由于图片是渐大的,所以鼠标所在的一个点位对于小图来说也许是头部,而对于大图来说也许都到了场外,那么显示出的效果就错了.使用"对焦&q

[AS功能代码教程14] 鱼眼放大镜

本节加了星号,借黑羽的话:"本节的内容稍微有些难度,如果不明白,可以暂时不看,待日后碰到类似问题时,再来查阅" 下面我们先用图解法来解释一下本实例 思路: 1.鱼眼放大镜是于若干个渐小的圆组成的; 2.使每个圆都去遮罩一个渐大的图片来实现,里面的小圆遮罩大较图片,外面的大圆遮罩较小图片; 3.还有最后一个重要的步骤是"对焦",由于图片是渐大的,所以鼠标所在的一个点位对于小图来说也许是头部,而对于大图来说也许都到了场外,那么显示出的效果就错了.使用"对焦&q

[AS功能代码教程13] 贪吃蛇

思路: 1.首先规定蛇的运动区域宽度(stagew)和高度(stageh) 2.增加键盘侦听,获得键控代码,如果该键与前一个键是反向的则不予改变 3.初始化中, 请注意:蛇头.蛇身.食物的大小均为 7 象素 4.每一次移动的步长(Move)均为8象素,以实现身体为一格一格的效果 5.吃到食物后,蛇身(body)长度增加5个单位,复制出5个身体 6.履带式前进:从尾部开始,后一个跟随前一个的位置,最前面的跟随蛇头 图示: 1.整体思路 2.蛇头.蛇身.食物的大小均为 7 象素,步长 8 象素

[AS功能代码教程12] 填色游戏

在本次课程中我们将学习使用Color类来制作一个填色游戏 并通过本实例复习for...in及SharedObject的应用 思路: 1.使用脚本代码创建一个调色盘,鼠标点击色块后进行取色; 2.绘制作为填充的影片剪辑并把每一部都存为影片剪辑.例如: 填充对象是一个人物,那么要把他的头发,眼睛,脸等部分都保存成影片剪辑; 3.最后把各部分影片再统一保存到一个影片剪辑(mc)中; 4.为了保存和读取mc中各影片中的颜色,所以要加入两个按钮 save_btn 和 load_btn . 步骤1: 绘制作

[AS功能代码教程09] 点阵字效果

第一次在fanflash上看到这个实例,感觉很不可思议 仔细研究一下发现,作者的构思还是很巧妙的,今天拿来与大家分享一下 这个实例可以说结合了BitmapData类的技术与Tween类的动感. 思路: 1.用AS创建一个空文本框,存储欲显示的字; 2.把这个文本框看成一个位图,并存储其位图数据; 3.逐行扫描这个位图数据,把有文字信息的像素点都存储到数组中; 4.最后根据数组复制出"点",并使每个"点"移动到相应的位置. 步骤1: 绘制10*10的圆点,保存为影片剪

[AS功能代码教程07] 百变图

思路:1.createEmptyMovieClip(MC),位于舞台中央,使之不断旋转; 2.用MC作载体,复制出num(150)个(p0~p149)影片,全部都依附于MC上; 3.AS中共有2个函数(function),分别为Change()和getShape(): Change():首先,获得一个随机图形编号(shape),然后为所有MC["p"+i]点设置大小及透明度,再调用getShape()获得该点的目标坐标; getShape():根据shape编号,返回组成该图形的目标坐

[AS功能代码教程05] 打字机效果

思路:1.首先用AS创造出动态文本框,用于输出文字: 2.用计时器,每隔一段时间累加输出下一个字符. AS代码层: _root.createTextField("output", 1, 0, 0, 500, 400); var txt_f:TextFormat = new TextFormat(); txt_f.font = "宋体"; //设置字体 txt_f.color = 0x333333; //设置文字颜色 txt_f.size = 22; //设置文字大小

[AS功能代码教程01] 通用延迟代码

使用方法: 将下列代码写入fla的第一帧:在任意帧中写入delay();命令就可以实现3秒钟延时功效: 思路: 1.使用FPS和onEnterFrame配合完成. 2.Flash动画默认1秒钟播放12帧,即FPS为12. 3.执行一次onEnterFrame(进入帧),counter++自加1,那么一秒钟要加多少次呢?1秒钟要进入12次帧,所以自加了12次.那么2秒钟,3秒钟呢-于是我们得出公式 总延迟时间 = 延迟秒数 * FPS 原理就是用帧数做延时. AS代码: var fps:Numbe