关于Flash留言板的周详教程

时间:2012.06.21频道:Flash

基于网页的留言板,我们已见得很多,一个完整的留言板包括三个部分: 1. 显示留言的页面(显示朋友们给我的留言) 2. 填写留言的页面 (向后台提交信息) 3. 数据库(用于保存后台信息) 关于如何制作基于网页的留言板,不去多作解释,能够参考相关资料。


  基于网页的留言板,我们已见得很多,一个完整的留言板包括三个部分:

  1. 显示留言的页面(显示朋友们给我的留言)

  2. 填写留言的页面 (向后台提交信息)

  3. 数据库(用于保存后台信息)

  关于如何制作基于网页的留言板,不去多作解释,能够参考相关资料。

  就现在而言,FLASH是不能够直接操作象ACCESS, SQL, Mysql 等数据库的,他只能依靠ASP ,PHP ,JSP等其他的语言来实现数据的提交和查询。同时,FLASH还能够和XML对接,实现一些数据的操作。

  FLASH和ASP的交互:

  无论是ASP,PHP还是JSP等其他语言,原理大都相同,本人对ASP熟悉一点,所以以下只讲解FLASH和ASP的对联;

  查看FLASH的帮助文档,能够找到好几种的交互方法,

  本人使用最多的还是:

  loadVariablesNum(url:String, level:Number, [method:String]) : Void

  loadVariablesNum(参数1,参数2,参数3),参数1为变量所处位置的绝对或相对 URL,参数2为一个整数,指定 Flash Player 中接收这些变量的级别

  参数3为发送变量的 HTTP 方法,常用的有"get"和"POST",推荐使用"POST"方法。

  例1:新建一个flash文档,拖一个可输入的文本框组件,取实例名为name_txt,再拖入一个按钮组件到场景中,取实例名为send_btn,在第一帧上写

  _root.send_btn.onRelease=function()

  {

  if(_root.name_txt.text!="")

  {

  myname=_root.name_txt.text;

  loadVariablesNum("write.asp",0,"POST");

  }

  }

  那么,测试影片后,在文本框中,输入一个不为空的字符后,点击发送按钮后,输入的内容,将被提交到同一个文档夹中的名为"write.asp"中去!

  write.asp通过Request.Form("myname")的方法,就能够得到提交过来的数据,这里就简单的实现了 FLASH向ASP提交数据。

  接下来看看FLASH如何从ASP读数据:

  例2:新建一个flash文档,拖一个动态文本框组件到场景中,取实例名为read_txt,在第一帧上写

  loadVariablesNum("read.asp",0,"POST");

  _root.read_txt.text=myname;

  理论上测试后,read_txt文本框会显示read.asp提交过来的myname中的值,但是有时候不能够保持实时性,常常得不到数据,相信也有许多朋友

   会碰到同样的问题,这里讲两个小技巧。

  技巧一:

   首先能够在FLASH初一个变量为 active_old=0; 在ASP中Response.Write("active_new=1")

   那么FLASH里能够写上:

  active_old=0;

  _root.onEnterFrame=function()

  {

  loadVariablesNum("read.asp",0,"POST");

  _root.active_old=active_new;

  _root.read_txt.text=myname;

  if(_root.active_old==1)

  {

  delete_root["onEnterFrame"];

  }

  }

  此段代码表示,开始FLASH会不断地访问read.asp,read.asp会把变量active_new传递给FLASH中的_root.active_old,当_root.active_old改变后,

   将停止事件。

  技巧二:

   使用loadVariablesNum("read.asp?temp=" random(10000),0,"POST");的方式,在每次访问时会得到最新的数据,不会再使用缓存中的信息。

  关于ASP中的代码如何书写,不再多作解释,重点讲解FLASH如何准确和及时得到数据库里的数据,达到我们期望的功能。

  [备注]

   我们常会碰到,中文提交到数据库后,数据显示出来为乱码,主要是由于编码的原因,只要在ASP中写上 codePage=”936”%>

  FLASH和XML的交互

  应该来说,用XML和FLASH来交换数据,还是不错的选择,首先,XML能够根据我们的需要,很清楚地定义其结构,FLASH也能够很容易去解释信息。

  例3:

  myxml=newXML();//创建一个XML新对象

  myxml.ignoreWhite=true;//空白忽略

  myxml.load(“music.xml”);//加载同目录下的music.xml文档

  myxml.onLoad=function(success)

  {

  if(success)

  {

  ReadXML();

  trace(“加载成功”);

  }else

  {

  trace(“加载失败”);

  }

  }

  以上的代码就能够检测xml是不是加载到FLASH中去了。

  以下是个简单的XML文档

  name=”song1”url=”mp3/01.mp3”/>

  name=”song2”url=”mp3/02.mp3”/>

  name=”song3”url=”mp3/03.mp3”/>

  XML加载进来后,我们需要做的是去解析和提取数据,为我们所用。

  以上ReadXML()函数就用来读数据。

  FunctionReadXML()

  {

  myArray=myxml.firstChild.childNodes;//把myxml的第一个子结点任何的数据以数组的方式给myArray

  totalNumber=myArray.length;//

  for(i=0;i<totalNumber;i )

  {

  arr_1=myArray[i].attributes.name;

  arr_2=myArray[i].attributes.url;

  }

  }

  现在,我们能够得到的结果是,在数组arr_1中保存了任何歌曲的名字,在数组arr_2中保存了任何歌曲的路径,我们就能够使用loadSound()等方法制作一个自己的播放器了!

  XML和ASP

  Xml和ASP各有各的优势,xml数据结构很清楚,但是没有ASP灵活,而且还能够查询和修改数据库,所以想一想,假如用ASP来动态生成xml,那么我们就能够两全其美了!

  这里需要一点ASP知识!

  以下一段实现ASP生成指定的XML。

  response.ContentType="text/xml"

  ifrequest.QueryString("Page")<>""then

  Page=Cint(request.QueryString("Page"))

  else

  Page=1

  endif

  pgsz=5

  %>

  DataBaseName="Manage/Message/Message.mdb"

  SetConn=Server.CreateObject("ADODB.Connection")

  Conn.Open"DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ="&Server.MapPath(DataBaseName)

  setrs=server.CreateObject("Adodb.recordset")

  rs.open"Select*fromMessageorderbyaddtimedesc",conn,1,1

  ifnotrs.eofthen

  rs.pagesize=pgsz

  Rs.Absolutepage=Page

  %>

  "Pagecount=""PageSize=""Recordcount="">

  i=0

  dowhilenotrs.eofandi

  %>

  "Sex=""Email=""Time="--"Homepage=""Title=""Content=""Reply=""/>

  i=i 1

  rs.movenext

  loop

  %>

  endif

  rs.close

  setrs=nothing

  Conn.Close

  setConn=Nothing

  %>

  [备注]

  我们常会碰到,XML中假如有中文,将会成乱码,所以只要在flash中写上

  System.useCodePage=true,就OK了!

  以上只是些基础知识,下面具体讲解留言板的制作和关键:

  效果地址:http://www.u-lee.com/bbs.htm

  是我的第一个版本的留言板

  留言板主要包括以下功能:游戏,留言(提交留言),播放音乐(mp3),管理功能(删除留言)

  使用到的技术:AS,ASP,XML, database

  需要解决的技术问题:

  1.留言内容的分页显示,

  2,使用List组件显示歌曲列表,列表使用XML动态更新,

  3,使用ScrollPan组件存放留言内容,当有新的留言内容产生时,自动调整位置,最新留言置顶,

  4,加载声音文档,如何实现播放完一首歌曲后,自动换到下一首,

  5,删除留言自动调整页面。

  原理是把任何的数据用ASP提取出来,然后由FLASH来判断,使用split方法,把数据存到数组里去,需要时,再去取,这样有一个弱点,就是使用起来,分页时,会把无需的数据也调用了进来,不是很科学!

  接下来讲的是改进后的版本。原理是用ASP动态生成XML,当分页时,点下一页时,继续访问ASP,从新生成第二页的XML,都由FLASH访问XML,来加载数据,由ASP访问数据库,读和写数据。

  V2.0版本中FLASH原文档共有3个,leave.swf只是个容器,把write.swf和leave.swf加载到里面去。

  write.swf为提交数据,read.swf为读数据.

  leave.swf:

  两个按钮,一个查看留言btn1一个我要留言.btn2

  btn1:_parent.mess.loadMovie("read.swf");

  btn2:_parent.mess.loadMovie("write.swf");

  其中更有,上一页和下一页连同一个下拉条

  主要代码:

  xiala.onEnterFrame=function(){//下拉的位置,控制着留言内容mess的位置

  if(ggg==1){

  mess._y=28;

  }else{

  y=xiala.btn._y;

  yy=y/dist1;

  mess._y=b_2*yy 30;

  }

  };

  write.swf

  (图片见word文档)

  主要代码:

  System.useCodepage=true;//支持中文编码

  this_mc._visible=false;//this_mc为一个填写错误提示的影片剪辑

  this_sex="先生";//默认sex为先生

  functionclean(){//点取消按钮时,清空任何数据

  this_name.text="";

  this_homepage.text="";

  this_email.text="";

  this_title.text="";

  this_content.text="";

  }

  functionemailcheck(str){//检测email填写是否正确,判断是否有@和点

  at=false;

  dot=false;

  for(i=0;i

  if(str.charAt(i)==’@’){

  at=true;

  }

  if(str.charAt(i)==’.’){

  dot=true;

  }

  }

  return(at&&dot);

  }

  clean_btn.onRelease=function(){

  clean();

  };

  send_btn.onRelease=function(){//提交按狃代码

  if(this_name.text==""){

  this_mc._visible=true;

  this_mc.tishi.text="姓名不能为空!";

  }elseif(emailcheck(this_email.text)==false){

  this_mc._visible=true;

  this_mc.tishi.text="请正确填写邮件!";

  }elseif(this_title.text==""){

  this_mc._visible=true;

  this_mc.tishi.text="主题不能为空!";

  }elseif(this_content.text==""){

  this_mc._visible=true;

  this_mc.tishi.text="内容不能为空!";

  }else{

  myName=this_name.text;

  myHomepage=this_homepage.text;

  if(myHomepage==""){

  myHomepage="http://www.u-lee.com";

  }

  myEmail=this_email.text;

  myTitle=this_title.text;

  myContent=this_content.text;

  mySex=this_sex;

  trace(myName);

  trace(myHomepage);

  trace(myEmail);

  trace(myTitle);

  trace(myContent);

  trace(mySex);

  loadVariablesNum("write.asp",0,"POST");//假如填写的数据全部合格,将提交数据到write.asp

  _parent.page_num=1;

  _parent.prev_btn._visible=false;

  _parent.txt._visible=true;

  _parent.xiala._visible=true;

  _parent.next_btn._visible=true;

  _parent.btn2.gotoAndStop(1);

  _parent.btn1.gotoAndStop(2);

  _parent.ggg=0;

  _parent.mess.unloadMovie();

  _parent.mess.loadMovie("read.swf");//提交后,自动转入显示留言的页面

  }

  };

  listenerObject_1=newObject();//侦听事件,假如选择了"先生"则this_sex="先生";

  listenerObject_1.click=function(eventObject){

  this_sex="先生";

  };

  listenerObject_2=newObject();

  listenerObject_2.click=function(eventObject){//侦听事件,假如选择了"先生"则this_sex="女士";

  this_sex="女士";

  };

  sex_1.addEventListener("click",listenerObject_1);

  sex_2.addEventListener("click",listenerObject_2);

  stop();

  read.swf

  以上是个空影片剪接,用于放置留言信息,想想假如我想每页显示5个,那么我需要复制5个这样的影片,放到场景中,再把从xml中的提取出来的数据注入到每个影片中的1-5个动态文本框中去.

  如何读数据,上面已讲过了,现在只要把数据赋给动态文本框中就能够了.需要注意的是,我们选用的是自定义的文本框,首先确保他是多行的并且是自动换行的,所以我们考虑的是,文本框的高度必须根据内容的多少来显示。以下代码就能够实现:

  scroll_1=this.message_load_mc["message_mc" i].content_txt.maxscroll;//取得内容的最大滚动量

  this.message_load_mc["message_mc" i].content_txt._height=scroll_1*18;

  //一行文本,假如是12号字大约是18px,那么*18后,就能够得到content_txt._height了

  回复同样也是这样另外,低色的高度也要根据上面内容来确定。

  this.message_load_mc["message_mc" i].back_2._y=this.message_load_mc["message_mc" i].back_1._y this.message_load_mc["message_mc" i].back_1._height 2

  //得到back_2._y坐标。

  完整的代码:

  stop();

  System.useCodepage=true;

  //现在是第几页,由_root里的this_nowpage来传给他,在场景中定义

  this_nowpage=_parent.page_num;

  temp=0;

  read_xml=newXML();

  read_xml.ignoreWhite=true;

  read_xml.load("DataSource.asp?Page=" this_nowpage "&" Math.random(10000));

  //刷新DataSource.asp,确保不使用缓存里的数据

  read_xml.onLoad=function(success){

  if(success){

  trace("OK");

  parseXML();

  }else{

  trace("加载失败");

  }

  };

  functionparseXML(){

  name_arr=newArray();

  sex_arr=newArray();

  email_arr=newArray();

  time_arr=newArray();

  homepage_arr=newArray();

  title_arr=newArray();

  content_arr=newArray();

  reply_arr=newArray();

  total_arr=newArray();

  total_arr=read_xml.firstChild.firstChild.childNodes;

  //---------总记录数-------

  totalRecord=read_xml.firstChild.firstChild.attributes.Recordcount;

  //---------总页数---------

  totalPage=read_xml.firstChild.firstChild.attributes.Pagecount;

  _parent.total_1=totalPage;

  //---------当前页数--------

  now_Page=read_xml.firstChild.firstChild.attributes.CurPage;

  //---------每页显示记录数-------

  page_size=read_xml.firstChild.firstChild.attributes.PageSize;

  trace(totalRecord);

  trace(totalPage);

  trace(now_Page);

  for(i=0;i

  name_arr[i]=total_arr[i].attributes.Name;

  sex_arr[i]=total_arr[i].attributes.Sex;

  email_arr[i]=total_arr[i].attributes.Email;

  time_arr[i]=total_arr[i].attributes.Time;

  homepage_arr[i]=total_arr[i].attributes.Homepage;

  title_arr[i]=total_arr[i].attributes.Title;

  content_arr[i]=total_arr[i].attributes.Content;

  reply_arr[i]=total_arr[i].attributes.Reply;

  }

  showmessage();

  }

  functionshowmessage(){

  _parent.txt._visible=true;

  _parent.txt.total_txt.text="一共有" totalRecord "记录";

  _parent.txt.nowpage_txt.text=this_nowpage "/" totalPage;

  for(i=0;i

  this.message_load_mc.attachMovie("message_mc","message_mc" i,i);

  this.message_load_mc["message_mc" i].name_txt.text=name_arr[i] "(" sex_arr[i] ")";

  this.message_load_mc["message_mc" i].title_txt.text=title_arr[i];

  this.message_load_mc["message_mc" i].content_txt.text=content_arr[i];

  this.message_load_mc["message_mc" i].reply_txt.text=reply_arr[i];

  trace(this.message_load_mc["message_mc" i].reply_txt.text);

  this.message_load_mc["message_mc" i].time_txt.text=time_arr[0];

  this.message_load_mc["message_mc" i].back_2._y=this.message_load_mc["message_mc" i].back_1._y this.message_load_mc["message_mc" i].back_1._height 2;

  scroll_1=this.message_load_mc["message_mc" i].content_txt.maxscroll;

  this.message_load_mc["message_mc" i].content_txt._height=scroll_1*18;

  this.message_load_mc["message_mc" i].back_2._height=this.message_load_mc["message_mc" i].content_txt._height 15;

  scroll_2=this.message_load_mc["message_mc" i].reply_txt.maxscroll;

  this.message_load_mc["message_mc" i].reply_txt._height=scroll_2*18;

  if(this.message_load_mc["message_mc" i].reply_txt.text==""){

  this.message_load_mc["message_mc" i].back_3._height=30;

  }else{

  this.message_load_mc["message_mc" i].back_3._height=this.message_load_mc["message_mc" i].reply_txt._height 10;

  }

  this.message_load_mc["message_mc" i].back_3._y=this.message_load_mc["message_mc" i].back_2._y this.message_load_mc["message_mc" i].back_2._height 2;

  this.message_load_mc["message_mc" i].txt_1._y=this.message_load_mc["message_mc" i].back_3._y 5;

  this.message_load_mc["message_mc" i].reply_txt._y=this.message_load_mc["message_mc" i].txt_1._y;

  this.message_load_mc["message_mc" i]._x=0;

  this.message_load_mc["message_mc" i]._y=temp;

  temp=temp this.message_load_mc["message_mc" i]._height 15;

  this.message_load_mc["message_mc" i].btn1.onRelease=function(){

  homepage_num=Number(this._parent._name.slice(10));

  str_1=homepage_arr[homepage_num];

  getURL(str_1,"_blank");

  };

  this.message_load_mc["message_mc" i].btn2.onRelease=function(){

  email_num=Number(this._parent._name.slice(10));

  str_2=email_arr[email_num];

  getURL("mailto:" str_2);

  trace(str_2);

  };

  }

  trace(" " this._height);

  _parent.b_2=-1*this._height 250;

  }

  以上的任何的操作,测试时需要在ASP环境下。

  以上假如有不确当的术语,请谅解!

  感谢您阅读我的心得!谢谢!

  能够把“FLASH留言板原文档”中的内容全拷到ASP环境下

  如http://127.0.0.1/web/index.html就能够了
相关阅读Readings
  • 使用Flash软件可以做什么

    使用Flash软件可以做什么 从2001年第一次接触Flash到现在已经快10年的时间了,当时学Flash也是一个很冒险的冲动,我是计算机专业出身...

    04.17
  • 使用 Flash 可以做什么

    使用 Flash 可以做什么 使用 Flash 中的诸多功能,可以创建许多类型的应用程序。以下是 Flash 能够生成的应用程序种类的一些示例: 动画...

    04.17
  • Flash程序的测试方法

    随着RIA(Rich Internet Application)的流行,以往测试HTML类型的应用程序的方法对于测试Flash已经有点不够用了。 Kristopher Schultz在...

    04.20
  • Flash绿色版打开提示Java出现错误的解决方法

    回到实际问题中,现在可以明确问题的根源是缺少Java运行环境,那下载安装一个看看是否有效。 步骤1:CODE: 登陆Java下载站点:http://www...

    04.20
  • 网页中演示类FLASH动画制作规范

    在工作中所遇到的涉及到flash的项目一般会根据其具体应用分成两大类:演示类、交互类。为了使项目更加快速有效的完成并且保证工作质量,...

    04.20
留言评论Comment
精彩推荐Recommend
Copyright © 2010-2017 XPlaySoft.com 软件玩家 All Rights Reserved 粤ICP备12021207号