最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
AS 功能代码教程
时间:2022-07-02 17:08:17 编辑:袖梨 来源:一聚教程网
两点间距离
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
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
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);
//得出球的新位置=球的初始位置—(圆心位置+圆上的位置)
//之所以减去(圆心位置+圆上的位置): 让小球位置与鼠标位置相反
};
}
}
相关文章
- 第五人格11.22共研服有什么更新 11月22日共研服更新内容介绍 11-21
- 原神恰斯卡怎么培养 11-21
- 无期迷途四星装束是谁 11-21
- 王者荣耀帝丹高中校服怎么获得 11-21
- 光遇姆明季后续版本怎么玩 11-21
- 《潜行者2:切尔诺贝利之心》使用手电筒方法介绍 11-21