当前位置:软件学习 > Flash >>

Flash基础理论课

在本次课中我们将介绍两种方法来完成该效果,重点掌握双重循环语句
还要介绍 TextField._alpha 方法不可用的解决办法
单循环:
for (i=0; i<5; i++) {
trace("i="+i);
}

运行结果如下:
i=0
i=1
i=2
i=3
i=4

双重循环:
就是在for循环中再加入一个for循环
for (i) {
   for(j) {}
}

下面看一个双重循环的例子
for (i=0; i<5; i++) {
for (j=0; j<3; j++) {
  trace("i="+i+" j="+j);
}
}
运行结果如下:
i=0 j=0
i=0 j=1
i=0 j=2
i=1 j=0
i=1 j=1
i=1 j=2
i=2 j=0
i=2 j=1
i=2 j=2
i=3 j=0
i=3 j=1
i=3 j=2
i=4 j=0
i=4 j=1
i=4 j=2
i=5 j=0
i=5 j=1
i=5 j=2
i=6 j=0
i=6 j=1
i=6 j=2
i=7 j=0
i=7 j=1
i=7 j=2
i=8 j=0
i=8 j=1
i=8 j=2
i=9 j=0
i=9 j=1
i=9 j=2



总结一下可以这样写:
当i=0时,j=0, j=1, j=2
当i=1时,j=0, j=1, j=2
当i=2时,j=0, j=1, j=2
当i=3时,j=0, j=1, j=2
当i=4时,j=0, j=1, j=2

我们再形象地解释一下双重循环的意思:
把 for (i=0;i<5;i++){...} i从0到4,循环了5次,就把这五次循环表示为5个人
"小赵","小钱","小孙","小李","小周"
把 for (j=0;j<3;j++){...} j从0到2,循环了3次,就把这三次循环表示为3件事
"买菜","买肉","买米"
就相当于:
当i="小赵"时,他要去 j="买菜", j="买肉", j="买米"
当i="小钱"时,他要去 j="买菜", j="买肉", j="买米"
当i="小孙"时,他要去 j="买菜", j="买肉", j="买米"
当i="小李"时,他要去 j="买菜", j="买肉", j="买米"
当i="小周"时,他要去 j="买菜", j="买肉", j="买米"

本节中将用到的利用双重循环实现行列分配的问题
columrow2.jpg

已知库中有一个链接名为 mc 的影片剪辑,为一个圆,大小为30,注册点在左上
var size = 30;
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);
//i*Row+j 确保每个影片的新名字和深度都不相同

//这里也可使用getNextHighestDepth()
  p._x = i*size;
  p._y = j*size;
//设置圆的位置,双循环的意思是: 有 Colum 行,且每一行中都有 Row 个列
}
}

解释过来就是:
当 x 坐标 = 第1列时,分配Row个圆,y坐标从0到Row-1
当 x 坐标 = 第2列时,分配Row个圆,y坐标从0到Row-1
当 x 坐标 = 第3列时,分配Row个圆,y坐标从0到Row-1

                        ... ...
当 x 坐标 = 第Colum-1列时,分配Row个圆,y坐标从0到Row-1



矩阵易做图:

制作方法(一)

思路:
1.制作一个有若干帧的影片剪辑,每一帧都代表一个随机的字母或数字;
2.设置影片文本的大小为30,用舞台大小除以字母大小,确定每行每列能容纳多少文本;
3.每列容纳字符个数为Colum个,共Row列;
4.根据Colum和Row的确定影片的行位置和列位置。

步骤1:

columrow2.jpg

    制作一个影片剪辑,有若干帧,每帧中一个静态文本框

    内容为一个字母或一个数字
    字体: Arial,字号: 30,加粗,颜色:0x00FF00
    连接—>导出—>字符"txt"

步骤2:
在第一帧中写入代码
var size = 32;
//比文本框大出2个象素,做为行列间距
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("txt", "t"+(i*Row+j), i*Row+j);
  p._x = i*size;
  p._y = j*size;
  //安排每个新字符影片的位置,每一行中都有Row个列
  p.onEnterFrame = function() {
   this.gotoAndStop(random(this._totalframes));
   //每次随机取一帧,实现随机字母或数字
   this._alpha = random(100);
   //随机的设置影片剪辑的透明度
  };
}
}


在写本节内容时,原本只想用方第二种方法(纯AS编写),但在测试中发现 TextField._alpha 和TextField._rotation 方法是“无效”的,随后在网络上发现了解决的办法,下面我们先来看一下纯AS编写的部分,然后在看“失效”的解决办法。



制作方法(二)
思路:这次只使用创建TextFiled的方法,而不是再使用影片剪辑中的方法

在第一帧中加入以下代码
var t_f:TextFormat = new TextFormat();
t_f.size = 20;
t_f.font = "Arial";
//设置字体格式
var Colum = Math.floor(Stage.width/t_f.size);
var Row = Math.floor(Stage.height/t_f.size);
for (var i = 0; i<Colum; i++) {

  for (var j = 0; j<Row; j++) {
var T=_root.createTextField("txt"+(i*Row+j),i*Row+j,0,0,0,0)
  //创建文本框
  T._x = i*t_f.size;
  T._y = j*t_f.size;
  //设置其坐标位置
  T.textColor = 0x00ff00;
  T.setNewTextFormat(t_f);
  T.autoSize = true;
  T.selectable = false;
  //T.embedFonts = true;
  //设置文本框属性
}
}
_root.onEnterFrame = function () {
for (var i = 0; i<Colum*Row; i++) {
  if (Math.random()<0.5) {
   this["txt"+i].text = String.fromCharCode(65+random(26));
   //随机的字母
  } else {
   this["txt"+i].text = String.fromCharCode(48+random(10));
   //随机的数字
  }
  //this["txt"+i]._alpha = random(100);
  //随机的文本透明度
}
};


解释一下被注释掉的两句:
T.embedFonts = true;
使用嵌入字体轮廓进行呈现,前提是在库中要导入该字体元件
this["txt"+i]._alpha = random(100);
在T.embedFonts = true; 设置文本框透明度



TextField._alpha 和 TextField._rotation 方法“失效”解决办法

1.在库中创建字型
<1>点库右上角的倒三角,选择“新建字型...”
<2>建立字体元件(和你的字体名字变量一样),然后选择字体
<3>右键选择你刚创立的元件。选择“为ActionScript导出”写入链接名,本节中为"Arial"

2.设置 TextField._embedFonts = true

使用嵌入字体轮廓进行呈现,是使用 TextField._alpha 和TextField._rotation 的前提,嵌入字体轮廓就是指在库中导入字型。

好了现在可以加上注释掉的两句使一使效果了

补充:flash教程,动画技术
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,