首页 | 手机 | 笔记本 | 硬件 | MP3 | 数码相机 | 品牌机 | 办公 | 网络 | 服务器 | 投影机 | 新闻 | 游戏 | 学院 | 下载 | 论坛 | 博客 | 商城 | 分站 | 北京 上海 广州 深圳
首页 >> 学院 >> 网页制作 >> 网页制作Flash
完美的loading-吐血整理!
2007-10-2 8:58:00 文/aw 出处:blueidea.com
  共三部分:

  1、基础
  2、MovieClipLoader相关讨论(较深入)
  3、V2组件相关问题

一、基础

  很久没有发技术日志了,要来就来个完美的。您别激动,一个小小的loading谈什么完美,我想你看了就知道^_^
  我的口号,将此文打造成全球最完善的非Flash初学者loading教程贴。
  转载请保留原文地址:http://www.awflasher.com/blog/?id=444

  首先,想说一下我写此文的动机。记得很早之前我曾经说过“没有loading的flash,不是完整的flash”。我想那个句话可能偏激了。因为有时候一些不到10k的flash,确实不需要做什么loading。但我始终认为,做一个优秀的loading是衡量一个flasher水准,甚至态度的。你问我为什么,我可以告诉你,因为loading是唯一一个你不会多看而所有用户、客户会看的东西,所以你对loading的重视程度,甚至可以反衬你这个flasher的职业道德!

  有些做设计为主的朋友,我认识不少,他们对loading都是得过且过的态度,做一个loading,更多的是自己找一个现成的,然后每次去套用,我个人认为是很不好的习惯。并不是说我不提倡代码、元件的重用度,而是我觉得对于loading这种东西,套多了,是要出问题的。我强烈建议那些已经达到可以修改人家loading水平的flasher看看我的东西,当然,如果你连flash的as该写在哪都不知道,建议先入门了。

  好,下面切入正题,如何制作loading。

  首先要感激Macromedia的大智慧,提供了很好的两个函数使我们可以做出完美的loading,那就是getBytesLoaded和getBytesTotal。请不要再用你改来改去改了两三年的那个什么getFrameLoaded什么什么了,我都记不清楚怎么拼了。我只想说,Frame的观念将在真正的Interactive -Design中淡化。更别提什么Scene,那是Flash的败笔!

  那么loading如何工作呢?我们如何利用这两个函数呢?这里要提到一个重要的概念。就是间隔调用。间隔调用有多种方式,下面列举出来,并列举出其在loading制作中的地位和用法,欢迎补充:

  ·setInterval方式
  写法:
  function loadCheck()
  {
   var p = getBytesLoaded()/getBytesTotal();
   if (p==1)
   {
   clearInterval(intervalID); // 释放间隔调用
   gotoAndPlay(someFrame); // 开始播放
   }
  }
  var interval = 30; // 这个数值是刷新频率
  var intervalID = setInterval(loadCheck,interval);

  我个人并不推荐初学者用这种写法。因为很多人容易忽视clearInterval,而这个东西被忽视掉,是很恐怖的!如果你的setInterval没有给及时移除,意味着你将在整个swf的播放过程中增加一个没有必要的负担!
  而且这种方法很不适合控制MoiveClip的状况(因为初学者会发现MC的路径是个大问题,而loadCheck本身就是个函数,还是被 setInterval调用的,要在loadCheck中指一个路径出来,挺麻烦的,你不要指望_root,那样会让你的程序不规范;也不要指望 this,因为在函数中用this似乎不太理想;最好什么都不写,但往往你不敢不写),进而做出更好的效果。

  ·onEnterFrame方式
  我最喜欢的就是这种方法了。比较方便、直观。
  因为往往我们是要用一个MC体现一个loading的进度,比如,一个进度条,或者更有创意的东西,只有你不能想到的,没有你不能做到的。
  那么究竟如何用呢。首先,把创意定好。然后给你的MC一个实例名字,比如叫做loader_mc。这时候在timeline上写代码,记住,是 timeline而不是MC上。因为这样便于代码统一、便于路径统一、便于管理和寻找。别为了省几个字母就把代码通通搬到button,mc上面去,然后一个on(press)了事。除非你是在敷衍你的作品;或者你是在为了交作业。
  loader_mc.onEnterFrame = function ()
  {
   var getTar:MovieClip = this._parent;
   var p = getTar.getBytesLoaded()/getTar.getBytesTotal();
   trace(p);
   if(p==1)
   {
   this.onEnterFrame = null;
   gotoAndPlay(someFrame); // 开始播放
   }

  }

  就这么简单,记住,在MC的事件函数体内部引用MC,永远是一件很快的事情。因为this就可以指向这个MC本身,通过诸如this._parent之类的方法,可以找到你所有的MC!

  ·直接依赖于timeline的循环方式
  非常非常非常古老的方式了,不介绍了。不过你们可以去问问那些一直不喜欢自己动手做loading的flasher,他们也许在改的某一个版本就是这个,呵呵。

  以上算是比较简单的。比较容易出问题的,还有两个。
  第一、MovieClipLoader
  第二、含有多种V2组件的Loader

  ================================
看本文的网友还看了:
热点关注:
·视频教程中心
·AutoCAD 2007
·Dreamweaver8
·Photoshop CS3
·PS图层全知道
·Flash Action Script
·数码照片处理大全
最新教程>>>
·Photoshop CS3视频教程:Vista壁纸自己做
·视频教程 Photoshop超超级去水印法
·Dreamweaver视频教程-制作网站三大原则
·AutoCAD 2007中文版标准视频教程—初识三维部
·AutoCAD 2007中文版标准视频教程—端盖(2)
·AutoCAD 2007中文版标准视频教程—建筑平面图
·GoLive视频教程—使用CSS编辑器之一
·GoLive视频教程—通过CSS+DIV进行布局之一
·学院频道热门文章
·卡巴斯基7.0简体中文版发布 带来了哪些改变?
·洋为中用 让迅雷和AvantBrowser成绝配
·体验Vista三个特性 鲜有人知的有趣操作
· 灵活操作 Vista用户安全控制功能
·教你安装Discuz Discuz! 6.0.0试用
·拒绝盗号 奇虎360保险箱抢先测试
·调出特色调出美 用Photoshop调色照片
·又见抠发教程 用Photoshop抽出滤镜抠发
·学院专题
·玩转智能手机 手机软件下载
·让你的系统守身如玉 系统进程防狼手册
·小编们的软件聚宝盆 连载中……
·炫夏桌面 高清晰壁纸集中下载
·广州发布日 Adobe CS3中文版全接触
·今日推荐
·引发行业大洗牌 399元主板风暴来袭!
·最精彩的较量 24款8600GT显卡横向评测
·十五款万元以下迅驰四笔记本横向评测
·多重创新 Intel开发者论坛07秋季峰会
·还买啥显卡 看专题千元级显卡免费送
2006 经营许可证编号: 粤B2-20050807