自己动手制作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帧,才是主体程序,如上所列,这样,才看到了计数器工作了! 编写程序确实是件累活,尤其我在几度想放弃的时候! 但是,放弃也是很难的,各种可能的原因老是在头脑中转悠...... 失败与成功其实仅相距丝毫,一纸之隔...... 越是在困境中的解脱,越是在折磨中的成功,你的成就感会加倍的递增! 只有具有相同经历的朋友,会理解我这样说! 接着,我还会去“自讨苦吃”...... |
|||