一组超酷的AS3音频频谱波形 (2009-4-23)
这是从一个老外的站上找到的,不过我现在都忘记那网址了。
写得很不错,不仅算法值得研究,而且整个架构以及OOP思想都很值学习。调用方法也都做好了,可以很方便地用在任何你想用到的地方。之前我的那个MP3播放器里用的就是其中的一个效果。
点击左键可切换效果。
这是从一个老外的站上找到的,不过我现在都忘记那网址了。
写得很不错,不仅算法值得研究,而且整个架构以及OOP思想都很值学习。调用方法也都做好了,可以很方便地用在任何你想用到的地方。之前我的那个MP3播放器里用的就是其中的一个效果。
点击左键可切换效果。
今天在天地会上看到有位朋友发了个模似波浪的效果,正好有点东西想用用这个,就下了下来。其实很多时候我们下的一些源码都是单独写的,效果是有了,可是要想用到自己的项目中的话一时半会还整不到一块来。不过,不要忘记了OOP的思想之一——封装,自己做了个简易的接口,用起来就方便啦。
用法很简单,在想要用的地方:
var wave:Wavef=new Wavef(600,200,600,1,3000);
//Wavef(stage_w,stage_h,num,mouse_diff_ratio,auto_interval)
your_obj.addChild(wave);
暂时命名为Moondy Player吧,呵呵。老实说这个东东还真研究了不少时间,也参考了不少前辈。其中的歌词提取部分是《Actionscript3.0 Animation》这本书里的,而频谱波形生成是用的一个老外的代码,播放器的UI也都是网上找来的-_-!。如果链网络路径的MP3地址的话,在本地放是没有问题,但放到服务器上这频谱波形就出不来,这应该是安全机制的问题吧,只好传了几首歌到自己服务器上给大家看效果了。
第一次弄,感觉还有很多不足的地方,有时间再改进下吧。
应各位朋友的要求,虽然不太完整,我还是把源码都放出来吧,供大家参考了。
源文件:moondyplayer.rar
PS:看来把MP3文件放在自己空间里是一件非常危险的事,流量程又快被吸干了,开防盗链都没用,只好先删掉先了。
接上一篇,现在说说AS的写法了。在AS中主要要实现的功能就是对XML的读取以及表单数据的提交,只要实现了这两个功能,其余的表现手法什么的都可以自由发挥咯。
在这里我只把主要的帖出来说一下,稍后我会附上源码的。
先是读取XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | private function loadxml() { var Requesturl:URLRequest=new URLRequest("getinfo.asp?page="+page+"&"+Math.random()* 10);//路径可以是绝对也可以是相对,后面加随机数是解决数据刷新问题。 loader=new URLLoader(Requesturl); loader.addEventListener(Event.COMPLETE,xmlcomplete); } private function xmlcomplete(e:Event) { listxml=new XML(e.target.data); add_list(); listxml.@page>1 ? add_page() : 0;//如果页数大于1,显示分页 } private function add_list() {//list_block为一个元件,里面有分别命名为book_title,book_name,book_date的三个动态文本。 for (var i=0; i<listxml.item.length(); i++) { list_block=new list_mc; list_block.y=25* i; list_block.visible=false; list_block.book_title.text=listxml.item.@book_title[i].toString(); list_block.book_name.text=listxml.item.@book_name[i].toString(); list_block.book_date.text=listxml.item.@book_date[i].toString(); } } |
当然,在显示列表的时候可以加一些视觉效果,这个就可以自行发挥咯。
接下来是表单提交的部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private function send_book(e:MouseEvent) { //在这里可以先对表单进行验证 var request:URLRequest=new URLRequest("sendinfo.asp"); var variables:URLVariables=new URLVariables(); variables.book_name=input_boxs.input_name.text; variables.book_qq=input_boxs.input_qq.text; variables.book_mail=input_boxs.input_mail.text; variables.book_title=input_boxs.input_title.text; variables.book_info=input_boxs.input_info.text; request.data=variables; var loader:URLLoader=new URLLoader(); loader.dataFormat=URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE,send_complete);//提交成功后运行send_complete loader.load(request); } } |
一个完整的留言版也会牵涉到很多东西,在这里附上源码,由于写得比较急,也没加什么注释,欢迎大家指正以及讨论。
有不少朋友问起flash留言版的问题,其实说白了flash跟数据库的交互并不是什么高深的技术,只要掌握了原理,便可一通百通。我很少写教程,也不太会写,我是属于那种会做但不太会说的人,但现在网络上相关的资料也不多,我也试着写一个吧。一个简易的AS3留言版。
大家应该都知道,flash与数据库交互的话要借助第三方语言,在这里我们需要的是一个生成XML格式的动态页。本例用的是ASP+ACCESS,因为本民工只对ASP比较熟罢了,熟悉PHP的朋友完全可以改成PHP+MYSQL的,因为AS3读的只是XML的格式,至于用何种语言来生成都没有关系。ACCESS我就不讲了,相信大家都会用,对照一下下面的字段名就好了。
先建配置文件
conn.asp
1 2 3 4 5 6 | <% on error resume next datapath = "date/book_data.mdb"//数据库的路径 set conn=Server.Createobject("adodb.connection") connstr = "Provider=Microsoft.Jet.OLEDB.4.0;"&"Data Source=" & Server.MapPath(datapath) conn.open connstr %> |
接下来是获取数据的动态页,也就是生成XML的页面
getinfo.asp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!--#include file="conn.asp"--> <% set rs=server.createobject("adodb.recordset") sql="select * from book order by book_id desc" rs.open sql,conn,1,1 rs.pagesize=8 i=1 mypage=request("page") if mypage="" then mypage=1 else mypage=cint(mypage) end if pages=rs.pagecount rs.absolutepage=mypage %> <?xml version="1.0" encoding="utf-8"?> <guestbook page="<%=pages%>"> <% do while not rs.eof%> <item book_name="<%=rs("book_name")%>" book_mail="<%=rs("book_mail")%>" book_qq="<%=rs("book_qq")%>" book_title="<%=rs("book_title")%>" book_time="<%=rs("book_time")%>" book_date="<%=rs("book_date")%>" ><![CDATA[<%=rs("book_info")%>]]></item> <% if i=rs.pagesize then exit do end if i=i+1 rs.movenext loop %></guestbook> |
在这里把分页功能也做了进来,也就是在AS3中通过加载getinfo.asp?page=XX来获取分页。而留言内容部分用CDATA,是为了能正常显示一些特殊字符。生成的XML格式如下
1 2 3 4 5 | <?xml version="1.0" encoding="utf-8"?> <guestbook> <item book_name="姓名" book_mail="16955732@qq.com" book_qq="16955732" book_title="标题名称" book_time="2009-1-13 下午 10:36:21" book_date="2009-1-13" ><![CDATA[留言内容]]></item> </guestbook> |
最后是把从flash里传递出来的表单参数写入数据库的页面
sendinfo.asp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <!--#include file="conn.asp"--> <% Dim book_name,book_qq,book_mail,book_title,book_info book_name=request("book_name") book_qq=request("book_qq") book_mail=request("book_mail") book_title=request("book_title") book_info=request("book_info") set rs = server.createobject("adodb.recordset") sql = "select top 1 * from book" rs.open sql,conn,1,3 rs.addnew rs("book_name") = book_name rs("book_qq") = book_qq rs("book_mail") = book_mail rs("book_title") = book_title rs("book_info") = book_info rs.update rs.close:set rs = nothing %> |
现在准备工作都做好了,下一篇再讲解在AS3中的应用。
这是前阵子弄的一个简易的留言版,也当做是对XML的一个练习,在AS3中对XML的支持比以往提高了很多。不过不得不说一下,界面做得的确不怎么样,让我感觉到如果有位美工帮忙该有多好。
AS3不能直接与数据库通信,所以做留言版的话需要借助第三方语言,而具体用哪一种都是一样的。像本例是通过XML读取数据,那么不管是用ASP还是PHP还是别的什么,只要是生成一个输出XML格式的动态页就可以了。数据的传递也并不是一定要用XML,比如说数据量不大的时候,直接flashvar传参数也可以,这些都看具体情况了。
本例的分页是给动态页传递参数实现的,另外在提交表单时也加了些验证,但可能还会有BUG存在,欢迎大家来测试。