对象属性-flash篇
和上篇一样创造完全一样的 Flash 对象没有什么不同。
因为没有imaging Lingo来处理位图, 所以语法有一些法改变,flash有一个用作矢量的绘图 API,而且mc将会为色块形成理想的基楚对象。
例子 2.2 中Flash movie的运行功能和在例子 2.1 的 Director movie做的基本相同的。
在清单 6中是Flash的ActionScript。
你可能首先注意到的有关对象的 ActionScript 版本只带有一个脚本, 因此用一个清单列出它们。
把脚本放在例子movie中层的第一个帧上。
为了完全理解, 注意到我已经把一个列表 (阵列) 加入到 Flash movie的_level0对象, 包括了director movie中的十六进制色彩的色块
这仅仅以便我们将会看到相同的最终结果图像。
我也可以设置色彩的数值,然后将这些数值转换成十六位, 但是这里最好不要把问题弄得太复杂了。
注意:如果你是 Flash 新手, _level0 对象是 Flash 文档中层次的最低的movie。
一旦列表被增加到那 _level0, 我使用"for in" 重复循环产生一系列的色块。
"但是,等一下!"你可能要说"类脚本呢?" 好问题。
记住 Macromedia Flash 使用原型并非类脚本,因此当我们要继续下去, 要先创建原型。
在 Flash ActionScript 里的一个技巧是记住事实上所有的东西都是对象,你通常需要说你想要做什么,和哪个对象你想要用来完成这个工作。
在清单 6 的第 20 行上,我指示基础级别的MC产生一个新的mC,而且命名为一个通过循环改变的值的名字。
我可以使用index []来访问this 的属性来查阅新的名字, 这比使用点句法引用好些。
"sq" and iter连接iter和字符串形成一个"sq1"这种格式的新串.
我使用清单 6 的第 22 行的产生一个储存最近创造的mc的引用变量。
现在新的mc将会形成我们的原型,我将要给他加一个句柄。
To do this, I store the function in a property reference of the newly generated clip.
为了要做这,我在一个属性引用里存储新产生clip的函数。
这些发生的很快, 一下就到了第 25 行。
当我说 " theClip.makeChip=function(x,y,z){", 我产生mc的一个新属性叫做makeChip。
同时,我分配一个属性的值到一个处理每个色块色彩、大小和位置信息的方法。
展示语句的左边设定属性,而且右边分配一个新创造的过程。
这一个方法将会使用三个参数 ,参数的名字直接在括号后列出。
列表6.色块对象的ActionScript
1: //制造一些色块
2: // v.1
3:
4: //为_level0增加一个属性包含了苹果调色板所有缺省十六进制的值
5:
6:
7:
8: _level0.pHexList = ["0xFFFFFF", "0xFFFFCC", "0xFFFF99", "0xFFFF66", "0xFFFF33"];
9: // 很明显我简化了列表,因为我想你不会有这个需要,列表出缺省苹果调色板的十六进制的值
10:
11:
12: // 一个小操作,设定原始影片的缩放比
13:
14: _level0._scale = 100;
15:
16: //我将要贯穿上面的属性列表的每一项做一个循环
17:
18: for (iter in _level0.pHexList) {
19: //创建一个新mc对象命名为sq1,sq2及其他。
20: this.createEmptyMovieClip("sq"+iter, iter+1);
21://创建一个变量引用当前clip名
22: var theClip = this["sq"+iter];
23: //现在制作一个方法将绘制小的方块
24: //并且将movie移到属于自己的分配的位置
25: theClip.makeChip = function (index, size, alpha) {
26: //首先创建一个色彩对象
27: theclip.color = new Color(theclip);
28:
29: // 现在创建一个变量引用是十六进制色彩列表的当前值
30: var tHex = (_level0.pHexList[index]);
31: //现在为色彩对象设定十六进制的色彩值
32: theClip.color.setRGB(tHex);
33:
34: //将来自参数的index值存储到一个命名为pIndex的属性
35: theclip.pindex = index;
36:
37: // 将来自参数的sixze值存储到一个命名为psize的属性
38: theclip.pSize = size;
39: // 设定每个clip的pAlpha属性为参数Alpha
40: theclip.pAlpha = alpha;
41:
42: // 现在准备绘制小的方块,先设定线风格
43: theclip.lineStyle(1, theclip.color, theclip.pAlpha);
44: // 第二,移动到起始点
45: theclip.moveTo(0, 0);
46: // 三,设置fill函数
47: theclip.beginFill(theclip.color, 100);
48: // 四,向下画根线
49: theclip.lineTo(0, theclip.pSize);
50: // 向右画根线
51: theclip.lineTo(theclip.pSize, theclip.pSize);
52: // 向上画根线
53: theclip.lineTo(theclip.pSize, 0);
54: // 完成这个方块。
55: theclip.lineTo(0, 0);
56: // 完成fill函数
57: theclip.endFill();
58: // 设定每个clip的宽
59: _width = pSize;
60: //设定高
61: _height = pSize;
62:
63: // 产生一个保存每个 mc 的列位置的变量 * 注意这里取得当前索引的 mod,以便我们得到32行
64:
65: var tColumn = (theclip.pIndex)%32;
66:
67: // 产生一个支保存行位置的变量。很重要地, 我们在这里不使用浮点数,因此,我们使用数学对象的floor函数的建造。
68:
69: var tRow = math.floor((theclip.pIndex)/32);
70: //移动mc到分配的x位置
71: theclip._x = ((tColumn)*(theclip.pSize));
72: //移动mc到分配的y位置
73: theclip._y = ((tRow)*(theclip.pSize));
74: };
75: //调用makeChip函数
76: theclip.makeChip(iter, 10, 100);
77: }
在这里注意这个函数不期待第一个参数是一个对象引用,就像相关的 Lingo 句柄做的办法。
它知道对象而且不需要保留对它的引用。
当调用新创建的 mc 的 makeChip() 函数, open和close的之间的是将会运行的代码。
这些属性不在现在被设定;函数只是简单的被拷贝到对象。
稍后,当chip的 makeChip() 函数被调用时,它将会实际运行这个代码。
这在函数立刻发生在第 76 行上被建立之后.
这个最后命令简单的调用函数并且代码开始运行。
很容易看到代码将在新对象上执行,因为 Flash 格式化代码从最初函数缩进,而且它保持缩进直到函数在第 74 行上被关闭。
图片如下:

图 7. 像在 Lingo 例子中做的一样,一个单一脚本产生每一个色块。
虽然个每个的专用脚本都不同,仰赖他们个自语言的句法,可以看到他们基本上有相同的功效。
这些简单的对象在这里真实的设定显示一些原始的属性 (位置和色彩) 。
下一篇讲面向对象编程的高级部分,对象的怎么产生独立的能力,因为子们有自己的方法和工作链。