注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

K8拉登哥哥's Blog

K8搞基大队[K8team] 信息安全 网络安全 0day漏洞 渗透测试 黑客

 
 
 

日志

 
 

FLASH制作MP3播放器 链接失效 自动播放下一首 解决方案分析过程  

2011-08-23 13:06:46|  分类: Flash/Flex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
蛋疼 刚碰FLASH 就用AS代码来写MP3播放器  由于本人 不是专搞FLASH 那种前台用的鸟玩意
所以下载了精简版的FLASH  自然连手册也木有 写的时候 都是百度找资料参考 思路也是跟人走
发现AS代码很简单 加上有其它语言基础 所以 我一打开FLASH 几秒钟后 直接会了 哈哈 真简单
MP3播放器通过读取XML取歌曲列表 播放 暂停 继续 停止 上一首 下一首 全实现了 看上去已经
完成了 哈哈 好像也没啥问题 忽然 发现一个问题 就是播放时 MP3链接失效 就停在那里了
就差个 自动跳过的功能  尼码啊 为了这破J8功能 可把我弄蛋疼了 百度 看网上的MP3播放器代码
也没这功能 汉  看来 他们没考虑到  链接会失效的问题 所以都没写吧  我看的那些都没有 别的不知

于是为这玩意想解决的 方案 走了些弯路 也被网上那些不看官方手册的家伙们 误导

1 按照 正常的思路 我想取sound.start 的返回值 但 发现 不管URL是否有效 都返回 undefined
网上看了很多人说 也没法取  此法不通  然后想到 try catch  但这也行不通  蛋疼吧 有木有

2 我又想了个办法 就是判断歌曲是否存在  于是网上找到了 一个参考的例子  但也行不通
具体代码如下  引用  http://www.jb51.net/article/18609.htm

var exist = new LoadVars();
exist.onLoad = function(success) {
if(!success) {
trace("文件不存在");
}
}
exist.load("文件名");
上面的原话说 此代码应该说严重误导我们,onLoad事件指的是把文件下载完后执行的代码。(错误
我用他来判断本地文件 连下载都不用 它也没法检测存不存在 网络的也没用  此代码完全没用


//判断网络文件是否存在    能判断网络文件 但不能判断本地文件 不可取的其中原因之一
var exist = new LoadVars();
this.createEmptyMovieClip("item_mc", this.getNextHighestDepth());
item_mc.onEnterFrame=function(){
var total =this.target.getBytesTotal();
if(int(total)>101){
//这里没有使用total==undefined判断,因为发现不准,文件不存在时int(total)=101
delete item_mc.onEnterFrame;
trace("文件存在");
trace(int(total));//返回总字节
}
}
item_mc.target=exist;
exist.load("http://www.yunxingwenhua.com.cn/2011032806010.mp3");

3 加了一些FLASH群 问群里人 可是很多不是不会 就是  那个会的 方法 复杂
   我刚接触不到一天 你想让我直接进入高级部分 虾米可能嘛 又想别的法子

4 最后 我又想了一个方法 就是判断文件是否加载完 由于被成事不足败事有余的前人误导
网上参考那些加载影片是否加载完的代码 过长 我一看到 就懒得看了  浪费时间
加上没找到一个 令我满意的解决方案 我找到了官方手册  看到了一个加载MP3例子
哈哈 于是乎从里面 提取下面的代码 哈哈 真是得来全部废功夫 没想到用onload可以

而且并不是非得等下载完才执行代码   但是 要在播放MP3那里 的参数要设置成True
这一句     K8sound.loadSound(MusicPath_list[MusicCurren], true);//播放第几首
别的函数 可能onload事件是完后 才执行代码 但是 sound 的第二个参数是
是否开启 文件流方式  当你设置为True时 不用等下载完才执行
这个一般在那种下载大文件时用的  不是所有的电影或歌曲 非要等到下载完 才能看或听吧

//MP3播放失败 自动播放下一首   这才是可用的
K8sound = new Sound();
K8sound.onLoad = function(success:Boolean) {
   if (success)
   {
      trace("sound loaded");
   }
   else
   {
      trace("加载失败 播放下一首"); 
      //这里加入你自己的代码
   }
};

是的 你没看错 最终的解决方案  就这么简单 这个搞定了 还差个随机播放的 发玩文章再写  哈哈
随机的这个 是因为怕每次进入Blog  都是一成不变的歌曲 过于单调 所以决定要加上的  更容易

总结: 发现网上很多人学东西(不只是针对这FLASH 其它技术也一样) 大部分都COPY 
因为很多人要装B 别人发的有误 他们也照搬  很多人连测试都没测试  就转载来发布
很多站点  则是为了流量  其实想想 每天能更新N篇文章 站长压根没啥 鸟时间测试
学东西 最好还是参考官方手册 可以少走很多弯路  没有人比作者更了解自己的产品
因为不看官方的手册  明明简单的东西 被自己想复杂了 把时间浪费在不怎么玩的东西上不值得

如果 我没去看官方的例子  我最后的解决代码   会比上面多 还复杂   有时候浅水真的能淹死人
就算看上去功能再复杂的东西   也不过是N个简单问题的相加  别一开始就用复杂的眼光看事
很多时候 解决一个问题 很简单的   自己想复杂了 自己蛋疼  这是为什么 同一个功能 不同的人写
代码量不一样 效力也不一样的原因之一  代码多的 看上去显得你高手  其实可能你最菜
很多人 实现了某个小软件 以为自己很牛B  你有没想过 你认为复杂的东西 别人几秒钟就能写
当你 查看官方手册 和大部分网络资料都发现 没人能写出来 或公认的难时 那玩意才真叫难

就到这了 很少写这么详细的文章 没啥技术含量 只是让大家知道正确的学习过程 by QQ吻

PS: 其实一直以来 我都有个 “坏习惯”(就是一般喜欢先自己动脑 然后再查资料)
自己亲自动脑 好处是能练脑 坏处就是弯路多  希望大家先参考官方手册(你不想在上面发展的)
如果你真想学东西的话 可以另外在些基础上研究 一般官方都只给简单的例子
复杂的 更高效力的还是得自己去动脑   最后 学啥东西 只要你学得快都是好方法 不一定要我的 (仅供参考)
  评论这张
 
阅读(819)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016