设为首页

广西经贸职业技术学院论坛

 忘记密码
 免费注册
查看: 3424|回复: 1
打印 上一主题 下一主题

[动漫动画] Flash AS 入门教程-圆和椭圆函数的应用

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
发表于 2012-11-19 14:56:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
Flash AS 入门教程-圆和椭圆函数的应用
x=r*cosX //x、y是圆上一点的坐标;在第一帧上的脚本:
    this.f_mc._visible = this.d_mc._visible=0;for (k=1; k<21; k++) {duplicateMovieClip(this.f_mc, "f"+k, k);   duplicateMovieClip(this.d_mc, "d"+k, k+40); } for (k=1; k<21; k++) { this["f"+k]._x = 130*Math.cos(18*k*Math.PI/180);//圆半径是130,圆周上每隔18度 this["f"+k]._y = 130*Math.sin(18*k*Math.PI/180);//放一个复制的mc this["d"+k]._x = 130*Math.cos(18*k*Math.PI/180);//椭圆的长轴是130,短轴是60;椭圆的   this["d"+k]._y = 60*Math.sin(18*k*Math.PI/180); //圆周上也是每隔18度放一个复制的mc } 角度18*k*Math.PI/180中Math.PI/180是把1度转换成的弧度;k取1~20,那么18*k*Math.PI/180就是18度到360度。刚好每隔18度放置一个mc
  按Ctrl+Enter播放,我们可以看到复制的mc被放置成一个圆和椭圆。作为圆和椭圆,他们是静止在各自的位置上。如何让这个圆和椭圆动(旋转)起来哩?
 我们可以这样考虑,在帧频事件的循环中,每循环一次(j++),使圆(或者椭圆)上的点都再旋转18度(角度都增加18*j度),到达下一个位置,这样圆(或者椭圆)就可以旋转起来了。
 由于每一次旋转都是复制的mc的位置互换,而整体的图形没有改变,所以,我们不容易看到圆(或者椭圆)在运动,解决的办法是把其中的几个mc的放大系数改变。
 例 3.3.2
 打开3.3.2.fla文件,比较它与3.3.1.fla文件的脚本的差异,运行3.3.2.fla文件,观察效果。
 例 3.3.2源程序:
 j = 0; this.f_mc._visible = this.d_mc._visible=0; for (k=1; k<21; k++) {  duplicateMovieClip(this.f_mc, "f"+k, k);  duplicateMovieClip(this.d_mc, "d"+k, k+40); }  f1._xscale = f1._yscale=f10._xscale=f10._yscale=100;//放大复制后其中几个mc d5._xscale = d5._yscale=d15._xscale=d15._yscale=50;this.onEnterFrame = function() {  j++; for (k=1; k<21; k++) { this["f"+k]._x = 130*Math.cos(18*k*Math.PI/180+18*j*Math.PI/180);  this["f"+k]._y = 130*Math.sin(18*k*Math.PI/180+18*j*Math.PI/180);  this["d"+k]._x = 130*Math.cos(18*k*Math.PI/180-18*j*Math.PI/180);  this["d"+k]._y = 50*Math.sin(18*k*Math.PI/180-18*j*Math.PI/180); } };hanwangtx.com  角度中+18*j*Math.PI/180在帧频事件的循环中,每循环一次影片位置的角度增加18度。-18*j*Math.PI/180与前面方向相反。
  我们使圆和椭圆都旋转运动起来了,我们还可以不断改变圆的半径和椭圆的长、短轴,使圆和椭圆互相转换,或者其它的形状变化。有兴趣的可以参见3.3.3.fla文件。
 例 3.3.3源程序脚本:
 j = rotat=scale=0;//设置计数变量、旋转角度和放大系数的初始值为0; q = l=w=130; //设置圆的半径和椭圆长轴(开始时的值) m = 50; //设置椭圆短轴 this.f_mc._visible = this.d_mc._visible=0; for (k=1; k<21; k++) {   duplicateMovieClip(this.f_mc, "f"+k, k); duplicateMovieClip(this.d_mc, "d"+k, k+40); } f1._xscale = f1._yscale=f10._xscale=f10._yscale=100; //使复制的mc中是4个面积变大为4倍 d5._xscale =d5._yscale=d15._xscale=d15._yscale=50;this.onEnterFrame = function() { this._rotation += rotat;//使(f_mc的)父级mc旋转; this._xscale -= scale; //放大或者缩小(f_mc的)父级mc this._yscale -= scale;  j++;  for (k=1; k<21; k++) { this["f"+k]._x = q*Math.cos(18*k*Math.PI/180+18*j*Math.PI/180);  this["f"+k]._y = l*Math.sin(18*k*Math.PI/180+18*j*Math.PI/180);  this["d"+k]._x = w*Math.cos(18*k*Math.PI/180-18*j*Math.PI/180);   this["d"+k]._y = m*Math.sin(18*k*Math.PI/180-18*j*Math.PI/180); }  if ((j>40) && (j<=110)) {  l -= 2.2; //圆的宽每次减2.2  q -= 1;  //圆的高每次减1  m += 1.2; //椭圆的短轴每次增加1.2  w -= 1; //椭圆的长轴每次减1 }  if ((j>110) && (j<=220)) {  l += 2; //圆的宽每次加2  m -= 1.5;//椭圆原来的短轴每次减1.2   w += 0.7;//椭圆的长轴每次加0.7 } if ((j>220) && (j<=260)) {  q += 1;  //圆的高每次加1  l -= 3.2; //圆的宽每次减3.2   m--;  //椭圆原来的短轴每次减1 }  if ((j>260) && (j<=320)) {  q += 2; //圆的高每次加2   m += 2.5; //椭圆原来的短轴每次加2.5  w -= 2; //椭圆的原来的长轴每次减2
}
 if (j>320 && j<=450) {
 q -= 3.5;  //圆的高每次减3.5
 w += 1.5;  //椭圆的原来的长轴每次加1.5
}
 if (j>450 && j<=550) {
 q = -190;  //保持原来圆的高为190
 w = 180;  //保持原来椭圆的长轴为180
 rotat = 5; //这里给旋转变量赋值,f_mc的父级mc开始旋转
  scale = 1; //这里给放大系数变量赋值,f_mc的父级mc开始放大
 }
  if (j>550) {
  scale = -1; //f_mc的父级mc反方向放大
  rotat = -5;//f_mc的父级mc反方向旋转
 }
  if (j>650) {
   j = scale=0; //给各变量重新赋初值,使动画循环播放
   l = q=w=130;
   m = 50;
  }
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|版主考核中心|『经贸在线』 ( 桂ICP备15001539号-2  

GMT+8, 2024-11-23 08:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表