Flash Empire快来看国内闪客的作品大赏……学习其他闪客的源文件,对每个闪客来说都是有意义的提供众多的您所需要的闪客资源国内人气最旺的 Flash 技术论坛 关于闪客帝国的所有的所有……
在线教程
 


用 Flash 制作留言板(下)

作者:边城浪子 flasher

原文件下载
续上部分
三、Flash 里面的手脚

  完成了ASP部分,我们可以比较蹋实的来做FLASH里面的内容了。

  ASP部分完成了数据的读取和写入,而这些资料进入FLASH以后,则需要进行一定的排列和整理。这些工作在ASP里面做反而有些烦琐,而在FLASH里面来完成,则容易得多了……

  下面,看看我们的 timeline 吧:

  上面是我们的头一部分,也就是读取和写入的关键部分。我们可以通过阅读程序来了解整个过程。

  在 reading 段,程序是这样的:
 
(先初始化数据)

Set Variable: "eof" = "false"
Set Variable: "total" = 0
Set Variable: "added" = 0
Set Variable: "sub" = ""
Set Variable: "name" = ""
Set Variable: "text" = ""
Set Variable: "backmethod" = 0

(产生随机数)
Set Variable: "r" = Random (65500)
(通过随机参数调用程序,理由见上一部分
Load Variables ("http://www.yourhost.com/guest.asp?action="& r, "")

Set Variable: "temp" = "正在读取信息中……" 

  要说明的是:temp 是文本框变量名,temp 等于什么,屏幕上就显示什么。

  大家看:紧接着程序向下走,经过 read(只是一个标记),继续向下到达了一个 action keyframe。
 
If (eof ne "true")

Go to and Play ("read")
End If

  这就是我们前面讲过的,直到读完文件,不然总是返回 read 去显示“正在读取信息中……”。如果读取完成,也就是“eof eq "true"”了的话,执行下面一个关键语句。
 
Set Variable: "total" = Substring ( total, 0, Length ( total ) - 2 ) 

  如果您懂得程序,就不难发现:我们通过这个语句把取得的 total 值截去了两个字节——如果不这样做的话,您会发现返回的 total 竟然有两行,我们这样做是为了取得正确的数值。尽管 Flash 的数据类型不甚讲究,但是这种错误还是会出现的。

  好了,下面到了我们的 main 了,显示数据总数:
 
Set Variable: "temp" = "信息读取完成,共有信息条目数:"& total 

Stop 

  总数显示的页面下面会有两个按钮,一个是“查看”,另一个是“添加”,我们先来看简单的那个:“添加”。

  insert 只是停留在一个添加 frame 上,而当用户输入了信息以后,真正的提交工作是在 do_insert 完成:
 
If ((sub eq "") or (name eq "") or (text eq ""))

 Go to and Play ("error")
Else
 Set Variable: "temp" = "正在向服务器添加数据……"
 (action=add)
 Load Variables ("http://www.yourhost.com/cgi-bin/guest.asp?action=add", "", vars=POST)
 Go to and Play ("wait2")
End If

  很简单的一个提交,把信息传送到ASP程序去,然后转到 wait2 去等待结果。至于 error,不过是一个出错 frame 罢了,不用关心。

  wait2 等待成功,后面的 action 继续循环,直到知道写入成功为止。到此,添加的工作就完成了。画面上会显示“数据成功写入!”,并且有按钮带用户回到 reading 去。
 
If (added <> 1)

Go to and Play ("wait2")
End If

Set Variable: "temp" = "数据成功写入!"
Stop

  下一个部分,该是“显示”功能了。

  在做这部分的时候,我有点来了脾气,想弄得更好一些,所以,做了一些“多余”的工作。在我写这篇文章的时候,站点上测试的留言已经有几百条了,而且永远不会减少。但是,我当时还是根据自己的想法,把显示功能做了强化:少于6条留言的时候有一种处理,多于6条的还有一种处理。嘿嘿,只有发头几条留言的人才会发现:原来是有一些区别的……哦。其实这个功能真的很多余,完全可以通过程序在后面来解决,现在还给大家增添了读程序的负担,实在对不起各位闪客了。

  所以,view 的程序是这样开始的:
 
Set Variable: "cur" = total

If (total <= 6)
Go to and Stop ("view6")
Else
Go to and Play ("view6p")
End If

   我们先通过少于等于6条留言的处理,来展示是如何实现显示留言功能的:
 
Set Variable: "i" = 6

Set Variable: "current" = cur

Loop While (current > 0)
 Set Variable: "t"&i = eval("sub"& current)
 Set Variable: "current" = current - 1
 Set Variable: "i" = i - 1
End Loop

Stop

  我通过简单的方法来显示这小于等于6条留言,而且不用显示有翻页功能的按钮。要说明的是:t6 t5 t4 t3 t2 t1 是按从上到下排列的6个文本框,我们可以轻易的为他们赋值。而在这6个家伙的下面,则有6个长条的按钮——就是我们要按下去看详细内容的那些按钮,它们被点击以后,会带着 b=6 5 4 3 2 1 这6个不同的数值转向 viewdetail。

  viewdetail 其实也只是一个中间环节,它主要是来判断用户按下的按钮是否是无效的,如果有效,那么就转向真正的显示环节——viewdetail_now:
 
If (cur <= 6)

 If (b <= (6 - cur))
  Go to and Play ("nosuchitem")
 Else
  Set Variable: "load" = b - 6 + cur
  Go to and Stop ("viewdetail_now")
End If
Else
 Set Variable: "load" = b - 6 + cur
 Go to and Stop ("viewdetail_now")
End If

  关键的地方到了,看看 viewdetail_now 是怎样显示的吧:
 
Set Variable: "new_sub" = eval("sub"&load)

Set Variable: "new_name" = eval("name"&load)
Set Variable: "new_text" = eval("text"&load)
Set Variable: "new_sub" = Substring ( new_sub, 0, Length ( new_sub ) - 2 )
Set Variable: "new_name" = Substring ( new_name, 0, Length ( new_name ) - 2 )
Set Variable: "new_text" = Substring ( new_text, 0, Length ( new_text ) - 2 )
Set Variable: "the_sub" = new_sub
Set Variable: "the_name" = new_name
Set Variable: "the_text" = new_text
Stop

  我们先把每个数据做了类似 total 的处理,然后将他们赋给相应的文本框,显示就完成了。

  那么,多于6条留言是什么样的呢?我们给它加上了两个按钮,可以用来上下翻页的。他们的 action 其实很简单:
 
(上按钮)

On (Release)
 If (cur <> total)
  Set Variable: "cur" = cur + 6
  Go to and Play ("view6p")
 End If
End On

(下按钮)
On (Release)
 If (cur > 6)
  Set Variable: "cur" = cur - 6
  Go to and Play ("view6p")
 End If
End On

  在多于6条留言的处理上,我们还加上了一些内容:
 
Set Variable: "i" = 6

Set Variable: "backmethod" = 1
Set Variable: "current" = cur
Loop While (i > 0)
 Set Variable: "t"&i = eval("sub"& current)
 Set Variable: "current" = current - 1
 Set Variable: "i" = i - 1
End Loop

  backmethod 是专门为了返回而设置的。当信息很多的时候,用户看完一条,返回的时候却又返回到最前面,那可真的是大煞风景了!所以,我们增加了这个 backmethod,来告诉程序,到时候要返回到用户来的那个页面。(其实,如果把少于等于6条和多于6条的程序合并的话,就不需要这个了。) 

  我想,大概的意思我已经都讲到了,具体程序和按钮以及 MovieClip 之间的关系,必须要看原始的 TimeLine 才能完全领会。其实,这篇小文章,还只是一个介绍性的东西吧!

  好了,祝您早日写出自己的论坛!(说了半天很麻烦,其实真正写程序的时候很快啊。) 

  有不明白可以去论坛提问,也可以写信给我

(完)

返回教程

闪客帝国版权所有 如要摘编请联系我们