45IT.COM- 电脑学习从此开始!
DIY硬件教程攒机经验装机配置
设计Photoshop网页设计特效
系统注册表DOS系统命令其它
存储主板显卡外设键鼠内存
维修显卡CPU内存打印机
WinXPVistaWin7unix/linux
CPU光驱电源/散热显示器其它
修技主板硬盘键鼠显示器光驱
办公ExcelWordPowerPointWPS
编程数据库CSS脚本PHP
网络局域网QQ服务器
软件网络系统图像安全
页面导航: 首页 > 设计学院 > 网页设计 >

用FLASH 5制作实时控制计数器

电脑软硬件应用网 45IT.COM 时间:2005-12-30 19:14 作者:45IT收集

  FLASH5的ACTIONSCRIPT对于动画爱好者+编程爱好者是一个福音,它可以允许我们通过编程的形式来实现对影片的控制,下面将要介绍的是一个FLASH5制作的控制计数器。

  预览:


  首先,新建一个FLASH5文件,我们需要做的事情很简单,只是按“CTRL+F8”新建一个 
名称为“LINE”的“MOVIE CLIP”标号,然后用“TOOLS”工具箱内的“LINE TOOL”在“LINE”场景中间画一个短直线,这样就可以了,它就是我们要使用的全部材料。

  同样的方法,新建一个空的“MOVIECLIP”,名城是“NUM”,我们打开用户库(“CTRL+L”)会发现里面有两个“MOVIECLIP”标号。(如图1)


(图1)

  有击库中的“LINE”,选择“LINKAGE”,IDENTIFIER名称我们命名它为“SEED_LINE”,当然首先你要选定EXPORT THIS SYMBOL方式,这么做的目的就是要使得这根线出现在共享连接库当中以便于使用。(如图2)


(图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帧距离可以实现延迟效果。


 

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: baidushare.htm
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐知识