在本次课中我们将介绍两种方法来完成该效果,重点掌握双重循环语句
还要介绍 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
//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
for (var j = 0; 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
for (var j = 0; j
//创建文本框
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
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 的前提,嵌入字体轮廓就是指在库中导入字型。
好了现在可以加上注释掉的两句使一使效果了