as 进阶三角函数及应用

作者:袖梨 2022-07-02

在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 = 30;
//椭圆宽:W,椭圆高:H.

MC.moveTo(W*Math.cos(0), H*Math.sin(0));
//设置画线起点

MC.lineStyle(2);

for (n=1; n<360; n++)
{

tox = W*Math.cos(n*Math.PI/180);

toy = H*Math.sin(n*Math.PI/180);

MC.lineTo(tox, toy);

}
//当W=H的时候,画出的就是正圆。



二、椭圆分配
   
在学习AS
03教程中我们介绍了多边型的画法,有了这个基础在制作本实例就是小菜一碟啦.^_^

实例1:

步骤1:

   
绘制星形,保存为影片剪辑,连接—>导出—>标志符"star"
步骤2:
加入AS代码:
_root.createEmptyMovieClip("MC", 1);

MC._x = 200;

MC._y = 200;

var Num = 22;
//星星数量

var W = 200;

var H =
100;
//椭圆宽:W,椭圆高:H;当W=H时是正圆

var angle =
(360*Math.PI/180)/Num;
//每等份 =
圆的弧度(360*PI/180)/num份
for (i=0; i {
MC.attachMovie("star", "star"+i,
i);

MC["star"+i]._x = W*Math.cos(i*angle);

MC["star"+i]._y =
H*Math.sin(i*angle);
}
//复制num个以ang为距离平均分散到圆中


实例2:

步骤1:
   
绘制星形,保存为影片剪辑,连接—>导出—>标志符"star"
步骤2:
加入AS代码:
var num = 22;
//星星数量
var W = 60;

var H = 30;
//椭圆的宽和高
var
wdir = 1;

var hdir = 1;
//wdir:向宽的方向
//hdir:向高的方向
_root.createEmptyMovieClip("MC", 1);

MC._x = Stage.width/2;

MC._y = Stage.height/2;
//圆心X,Y坐标为舞台的中心

var angle =
(360*Math.PI/180)/num;
//每等份 =
圆的弧度(360*PI/180)/num份
for (i=0; i
MC.attachMovie("star", "star"+i, i);

}
//复制好星星备用
var
right = Stage.width/2-20;

var left = 20;

var bottom = Stage.height/2-20;

var top = 20;
//设置圆的最宽最窄值:wmax,wmin;设置圆的最高最矮值:hmax,hmin。


_root.onEnterFrame
= function () {

for (i=0; i
  MC["star"+i]._x =
W*Math.cos(i*angle);

  MC["star"+i]._y =
H*Math.sin(i*angle);

  MC["star"+i]._rotation +=
30;

}
//圆的大小W和H是动态改变的


W += wdir*5;

H += hdir*5;
//不断变化中的W和H
if
(W>right || W
  wdir *= -1;

}

if (H>bottom || H
  hdir *= -1;

}
//这两段用来判断出界后向相反方向运动


};



三、Sin文字串

步骤1:
   
拖出一个动态文本框,变量名为txt,保存为影片剪辑。
   
在库中右击这个MC文件—>链接—>勾选"为ActionScript
导出"和"在第一帧导出"这两项,"标识符"为"ST".

步骤2:
加入AS代码:
var mytext:String =
"学海无涯苦作舟";

var angle = 180/mytext.length;
//正弦图像(180度)根据字数划分每一份的度数


for (i=0;
i
var p:MovieClip = _root.attachMovie("ST", "ST"+i,
i);

p.txt =
mytext.charAt(i);
//逐个取出字符

p._x = 50+65*i;

p._y = 60;
//初始该影片的位置


p.angle =
angle*i;
//定义属性表示初始角度


p.onEnterFrame = function() {

  this.A =
(this.angle)*Math.PI/180;

//角度转换为弧度

  this._xscale =
this._yscale=100+50*Math.sin(this.A);

//根据正弦角度,调整该影片大小,范围从[50~150]

  this.angle += 10;

};

}

相关文章

精彩推荐