金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 程序指南 >> 文章详情
用FLASH 5制作实时控制计数器(图)

DEMON.S 5D多媒体 2001-12-29


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

  预览



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

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



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



  双击库中的“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帧距离可以实现延迟效果。


  发表评论 写信给编辑 关闭窗口
同栏目内容
·  打造天音听听自定义列表 2007-09-19
· Ping命令来快速检测网络故障 2007-09-04
· 用命令让电脑自动关机 2007-08-30
· 黑客窃取数据方法更简单 2007-08-30
· 巧妙解除限制 轻松复制网页文字 2007-08-24
· 不用密码和隐藏加密文档(2) 2007-05-17
相关内容
近期主推
中日合作 "月亮女神"携手"嫦娥"
·中日合作 "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
·美国教授设计出自适应机器人
·银河系可能有20多个黑洞
·俄罗斯第8届航空航天展开幕
近期热门
英海域惊现大龙虾为普通龙虾5倍
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
·能删除不良记忆的药物诞生
近期焦点
广西发现罕见溶洞钟乳石有30万年
·广西发现罕见溶洞钟乳石有30万年
·澳大利亚惊现“卡布基诺”海滩
·美国"彩色"瀑布夜幕下震撼游人
·地球上究竟有多少个物种
·英国探险家北极游泳破纪录
·世界之最 世上最小的动物
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号