当前位置: 电脑软硬件应用网 > 设计学院 > 网页设计 > 正文 |
|
|||
用FLASH 5制作实时控制计数器 | |||
2005-12-30 19:14:03 文/45IT收集 出处:电脑软硬件应用网 | |||
FLASH5的ACTIONSCRIPT对于动画爱好者+编程爱好者是一个福音,它可以允许我们通过编程的形式来实现对影片的控制,下面将要介绍的是一个FLASH5制作的控制计数器。 预览:
同样的方法,新建一个空的“MOVIECLIP”,名城是“NUM”,我们打开用户库(“CTRL+L”)会发现里面有两个“MOVIECLIP”标号。(如图1) 有击库中的“LINE”,选择“LINKAGE”,IDENTIFIER名称我们命名它为“SEED_LINE”,当然首先你要选定EXPORT THIS SYMBOL方式,这么做的目的就是要使得这根线出现在共享连接库当中以便于使用。(如图2) 双击库中的“NUM”进入标号编辑状态(注意,是标号编辑状态) 在“NUM”的第1帧输入要执行的ACTIONSCRIPT: for (i=1; i<=7; i++) { this.attachMovie("seed_line", "line"+i, i); this["line"+i]._alpha = 10; } this.line2._x = this.line3._x=this.line1._x+20; this.line5._x = this.line6._x=this.line1._x-20; this.line2._y = this.line6._y=this.line1._y+20; this.line3._y = this.line5._y=this.line1._y+60; this.line7._y = this.line1._y+40; this.line4._y = this.line1._y+80; this.line2._rotation = this.line3._rotation=this.line5._rotation=this.line6._rotation=90; 当然,上面的程序对于初学者还是比较复杂的,为了简化问题,我们需要一个抽象的思维,例如我们把刚才的“LINE”标号想象成积木块,我们要用这个积木块搭成一个“8”字形的“二级管”;这个过程现在看起来有些容易了,我们用FOR循环绑定共享连接库中的“SEED_LINE”(ATTACHMOVIE),赋予绑定的每一个“SEED_LINE”新的名称LINE I(1~7)7说明了二极管表达10个0~9数字只需要7根就够了。 绑定了线以后还要给于它位置,这里我们使用了相对位置(相对于LINE1),FOR循环下面所有的赋值指令就是排列了一个8字的过程。这就是一个8字的初始化,不过,它是一个隐隐约约的8,因为它的ALPHA属性是10。 好了,做好了8字形的集合材料“NUM”,同样也要使用LINKAGE存放到共享连接库中,IDENTIFIER名称是“NUM”。 按“CTRL+E”回到主场景当中,修改第一层的名称为“ACTION”,并且输入主场景初始化ACTIONSCRIPT: // INIT for (i=1; i<=6; i++) { _root.attachMovie("num", "num"+i, i); _root["num"+i]._x = 450-i*50; _root["num"+i]._y = 100; } _root.num1._x = 400; for (i=1; i<=6; i++) { _root["seed"+i] = 0; _root["lvl"+i] = i; } _root.seed1 = 1; // 0 function n0 (which) { for (i=1; i<=6; i++) { _root["num"+which]["line"+i]._alpha = 70; } _root["num"+which].line7._alpha = 10; } // 1 function n1 (which) { for (i=4; i<=7; i++) { _root["num"+which]["line"+i]._alpha = 10; } _root["num"+which].line1._alpha = 10; _root["num"+which].line2._alpha = 70; _root["num"+which].line3._alpha = 70; } // 2 function n2 (which) { _root["num"+which].line1._alpha = 70; _root["num"+which].line2._alpha = 70; _root["num"+which].line3._alpha = 10; _root["num"+which].line4._alpha = 70; _root["num"+which].line5._alpha = 70; _root["num"+which].line6._alpha = 10; _root["num"+which].line7._alpha = 70; } // 3 function n3 (which) { for (i=1; i<=4; i++) { _root["num"+which]["line"+i]._alpha = 70; } _root["num"+which].line5._alpha = 10; _root["num"+which].line6._alpha = 10; _root["num"+which].line7._alpha = 70; } // 4 function n4 (which) { _root["num"+which].line1._alpha = 10; _root["num"+which].line2._alpha = 70; _root["num"+which].line3._alpha = 70; _root["num"+which].line4._alpha = 10; _root["num"+which].line5._alpha = 10; _root["num"+which].line6._alpha = 70; _root["num"+which].line7._alpha = 70; } // 5 function n5 (which) { _root["num"+which].line1._alpha = 70; _root["num"+which].line2._alpha = 10; _root["num"+which].line3._alpha = 70; _root["num"+which].line4._alpha = 70; _root["num"+which].line5._alpha = 10; _root["num"+which].line6._alpha = 70; _root["num"+which].line7._alpha = 70; } // 6 function n6 (which) { for (i=4; i<=7; i++) { _root["num"+which]["line"+i]._alpha = 70; } _root["num"+which].line1._alpha = 70; _root["num"+which].line2._alpha = 10; _root["num"+which].line3._alpha = 70; } // 7 function n7 (which) { for (i=1; i<=3; i++) { _root["num"+which]["line"+i]._alpha = 70; } for (i=4; i<=7; i++) { _root["num"+which]["line"+i]._alpha = 10; } } // 8 function n8 (which) { for (i=1; i<=7; i++) { _root["num"+which]["line"+i]._alpha = 70; } } // 9 function n9 (which) { for (i=1; i<=3; i++) { _root["num"+which]["line"+i]._alpha = 70; } _root["num"+which].line4._alpha = 10; _root["num"+which].line5._alpha = 10; _root["num"+which].line6._alpha = 70; _root["num"+which].line7._alpha = 70; } // 0 function n0 (which) { for (i=1; i<=6; i++) { _root["num"+which]["line"+i]._alpha = 70; } _root["num"+which].line7._alpha = 10; } 不要害怕上面的ACTION数量,慢慢的看,它不过是两部分组成: 1,初始化。从共享连接库中绑定6个“NUM”出来放到主场景中(确定了位置_X_Y),并赋予了新的名称NUM I,在程序运行中,我们需要两组变量“SEED I”和“LVL I”分别代表6位的值和6位的层次。由于SEED1的值我们需要后增加,所以它的初始值是1。 2,显示函数0~9。分别是我们自定义的0~9的显示函数,其原理是用WHICH(第几位)的引入方法增加ALPHA的明度值来显示。 在主场景中新建一个层,名称是“ACTION-MAIN”,这里是主控值程序。 在第2帧插入ACTIONSCRIPT: // CTRL _root["n"+_root.seed1](_root.lvl1); for (i=2; i<=6; i++) { this.tempi = i-1; if (_root["seed"+this.tempi] == 10) { for (j=1; j<=tempi; j++) { _root["seed"+j] = 0; _root.n0(_root["lvl"+j]); } _root["seed"+j]++; _root["n"+_root["seed"+j]](_root["lvl"+j]); } } _root.seed1++; 这个过程已经简化的让人一下子看不懂了(我也快了),首先,为了马上输出反应最快的SEED1(第1位),要马上的使用_ROOT.N x(_ROOT.LVL1),这样会适当加快下面的进程,因为下面的进程很耗系统资源。一个FOR循环,从第2位开始判断是否进位,共判断到第6位,临时变量TEMPI用来存放当前的位数的前一位位数,内部过程是这样的:判断后一位是否等于10,如果是就执行另一个FOR循环来设定包括该位(TEMPI)开始的所有后位全部输出0,最后循环完的J恰好是最高位,所以我们用这个J来增加SEED J的存放数值,并输出,中间进位判定全部结束以后,SEED1自加一,等待下次进入帧以便于输出。 在“ACTION-MAIN”层的第3帧,只要输入这个ACTION,全部程序就会正常运行: // RETURN gotoAndPlay (2); 最后,“CTRL+ENTER”测试一下效果,是不是跟二极管的数字控制非常的相像? 注意的问题:1,“ACTION”层和“ACTION-MAIN”层不要合并成一个层,否则会出错误;2,适当拉长“ACTION-MAIN”层上的2-3帧距离可以实现延迟效果。 |
|||
最新热点 | 最新推荐 | 相关文章 | ||
解决Fla文件编译SWF后体积过大 Flash代码收集及常见问题解决方法 网页不能播放flash的解决 flash9.ocx 加载错误解决方法 IE(浏览器)无法显示Flash文件 新鲜玩法 Flash动画用电视观看 Flash制作地室中的幽灵火焰 用Flash制作即指即现的广告条 经典!给FLASH初学者的10点制作经验 javascript的下雨效果,比flash的… |
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |