自己动手制作flash计数器
 
  前几天,介绍了个ASP计数器,我一直想把它做成flash计数器。
  我清楚:要做成flash计数器,困难不小,起码得解决以下几个问题:
  数据库中的计数,通过ASP处理并发送,这个发送程序我没独立做过;
  flash接受该数据,以前我专门介绍过loadVariables指令读取外部数据,但对于ASP没试过;
  在flash中如何把数据显示成6位数字,即:如果点击数是“123”,那么前面3个“0”及后面的“123”如何做?
  虽然有ASP程序参考,但在flash中完全是两码事?
  在我收拾的资料中,绝无flash计数资料。
  那么,就完全靠自己做喽!
  这个练习包括了数据库、ASP程序、flash程序及互相间的通讯及数据处理,如获成功,无疑可掌握动态网页的关键知识!
  所以,这次我从数据库、ASP(套用了部分代码)、flash全部由自己书写,经过几天折腾,攻克不少难点,基本成功!
  其中几条经验值得同好参考:
·1、你如果想写自己的ASP,其中的与服务器连接、打开数据库、关闭等程序绝无必要自己书写,打个比方:flash嵌入网页中的一大段代码,我们没必要彻底搞懂,但不妨碍我们使用。
同理,在这段代码中,你必需找得到关于数据库名、字段字以及关于路径的部分,否则ASP是不会听你话的!
·2、要看懂ASP其实也不难,其指令按字义也知道个大概了,再把上、下文对照,读程序不算太难,有了这点基础,再根据自己需要写程序也就成为了可能。我这次实践就是明证!


·3、我至今未购过任何关于ASP的书,对一些环境参数尚未理解,但非得掌握的是几条重要指令,如:
  request,它能接受数据,比如服务器端,HTTP信息,还有可以从flash中接受数据,用flash做身份登录等就得用它了!
  Response,发送信息,我就是用它把ASP处理后的点击数传给flash的。
  还记得我上次说过吗?
  在flash中接受变量值时,外部文件格式一定要用MIME表示,ASP也不例外,请看我的ASP最后发送指令:
Response.Write "ccount="&ccount
  其中ccount就是经过简单处理的“点击数”,它是数据库中count字段的数值,其格式就是MIME的!
  这条语句的书写让我吃了不少苦哦!
  更多的磨难在flash中:
·4、在flash中接受ASP数据,经过多次试验,最后我用了:
  loadVariables("f_count.asp","","get");
  这条指令我上次详解过了,至今才真正投入实用,有3个参数,第1个是加载数据源,第2个我省略了,其意是加载到的“层次”或目标,最后一个就是加载和发送变量时的方法,GET 是将数据追加到第1个参数(就是ASP)在HTTP的末尾,从而,我们取得了ccount。
  下面就是flash部分了,ASP已经为我们处理了数据,看看flash如何完成显示数据:
·5、在场景中(除了题头看到的界面图形),我的练习是空无一物!
  需要前期制作的仅是从“0”到“9”10个MC,本例的元件库,就10个MC,它们的“链接名”与其在库中的名字一样,这样更方便,如右图:
 
·6、处理数据。
   加载的ccount是数字,flash对变量类型挺随和,比如:a=123是数字,a="123"是字符,后面的必需先知道ccount包含多少位数字,我只知道字符函数有这个功能,所以也转换为字符,然后取得有多少字符:存在C中,再规定计数器最大6位数:long。
  注意,countor是个虚拟对象,我创建它是为了把计数器“附着”于它身上,这样可以控制整体位置,如下代码,j是为显示多少个“0”作准备:
g=string(ccount);
c=length(g);
long=6;
createEmptyMovieClip("countor",0);
countor._x=30;
countor._y=18;
if (c<=long) {
j=long-c;
·7、决定有多少个“0”显示:
下面代码就是根据点击数,在最大6位数的前提下前面用多少个“0”来填空:
for(var i=0;i<j;i++){
countor.attachMovie("z0","f"+i,i);
var theF=eval("countor.f"+i);
theF._x=i*24;
dx=theF._x+24;
}
  注意,如果没有theF._x=i*24,那么所有“0”会挤在一块,参数24是依照每个数字的宽度设置的。
  变量dx是为下一个循环准备的,也就是记录下“0”显示的位置,以便后面的数字位置作参照。
·8、显示具体“点击数”
  下面的代码就是显示具体“点击数”了:
for(var i=0;i<c;i++){
cchr=g.charAt(i);
countor.attachMovie("z"+cchr,"n"+i,i+6);
var thev=eval("countor.n"+i);
thev._x=i*24+dx;
}
  我在测试代码时,发现前面的“0”被复盖了,原来,数字与“0”处在同一“层深度”,注意,“i+6”就是解决这问题,当然你可以“i+100”,只要与“0”不在同一层深度即可。
  最大的磨难来了,这为之付出了整整一天!
·9、数据加载判断语句
  上面的程序逻辑上无问题,但测试总是不成功,不知就里地东改西补,计数器总是“空”!
  万般无奈,我几乎放弃了这个练习,看一下flash的帮助吧!
  有一条信息引起我注意:
  “当用loadVariables加载数据时,你不能直接运用数据,得判断一下数据是否完全加载完毕...”
再在flash中利用“调试”命令观察变量情况,发觉ccount有数据,而g和c等变量就是“空”,说明这些变量还来不及得到加载的数据,程序已经流向结尾了!
  朋友们,利用flash的“调试”命令,观察变量动态,太重要啦!
  知道原因就好办了,我把全部程序分成3个帧,第1帧是加载数据(见上面内容),第2帧加判断,如下:
if (ccount eq "") {
gotoandplay(1);
} else {
gotoAndplay(3);
}
  第3帧,才是主体程序,如上所列,这样,才看到了计数器工作了!
  编写程序确实是件累活,尤其我在几度想放弃的时候!
  但是,放弃也是很难的,各种可能的原因老是在头脑中转悠......
  失败与成功其实仅相距丝毫,一纸之隔......
  越是在困境中的解脱,越是在折磨中的成功,你的成就感会加倍的递增!
  只有具有相同经历的朋友,会理解我这样说!
  接着,我还会去“自讨苦吃”......