浅触Flash的动画轮播特效

天气:sunny 心情:心情指数:3

对于Flash我是一个超级门外汉,这次会惹上这个麻烦,纯粹是因为自己对JS有一点点的了解,听说Flash的AS跟JS很像,就尝试着使用JS的想法写了这个动画轮播特效。

写完之后才发现,AS跟JS真的很像,连简写也只差一个字母而已。扯远了。

在写这篇日志之前,我得先感谢一下经典积木宝宝(JimBob),因为他的大力支持,使我的问题得到妥善的解决,另外也感谢对我求助帖关注的其他朋友。

好了,言归正转,先说一下我这个效果的一些情况(效果图如下所示)。

这个效果的前身是图片轮播,因为这里要用到的是轮播动画(SWF),所以有些不同之处。当时是从网上Down了一个图片轮播的源代来做参考。经过一番查看与研究之后,偷懒的在原有的基础上进行了一些修改,去除了许多冗余脚本,添加了一些原来没有的功能,并与XML结合发布了我的第一个版本的动画轮播的特效:在XML中指定动画时间,然后动画按照这个时间来播放,达到时间之后跳转到第二个动画播放。经过测试之后发现,使用setInterval的方式来控制时间,如果碰上动画比较大的情况,载入花了多长时间,这个动画播放的时间就会少了多长时间,原因就不细说了,因为在载入的时候,这个时间一直都在计算,所以就会少播放那么久。后来想把这个问题捂着瞒混过关,但问题不能这样处理,最终还是跟上头报告了这个问题,扔下一句话:想办法解决它!

经过多番努力,由于对Flash的工作原理不懂,最终还是没有想到其他什么方法来解决,想法被固在控制时间上。

突然想起GTalk上有看到Jimbob,他可是Flash高手,干嘛不问?于是就找上门了。

在他的细心讲解下,终于找到问题解决的突破口了:使用子场景中动画的当前帧与最后帧来做为触发下一动画的条件,事情进展顺利。推翻以前所有的脚本重写,终于把这个问题给解决了,现附上部分脚本:

function loadXml(url)
{
    var rXml = new XML();
    rXml.ignoreWhite = true;
    rXml.load(url);
    rXml.onLoad = function (success){
        if (success){
   Movie_Loader.createEmptyMovieClip("empty",this.getNextHighestDepth());
            itemArray = this.firstChild.childNodes;
   if(itemArray.length > 1){
    var i = 0;
    while(i < itemArray.length){
      _root.attachMovie("btn", "btn" + i, 1000 + i, {_x: 15 + 25 * i, _y: 120});
      _root["btn" + i].txt.text = i + 1;
      _root["btn" + i].index = i;
      _root["btn" + i].onPress = btnPress;
      i ++;
    }
   }
   SwitchMovieClip();
   showBtn(index);
        }
    };
}

function SwitchMovieClip(){
 Loader_Item = itemArray[index].attributes;
 Movie_Loader.empty.loadMovie(Loader_Item.picUrl);
 Movie_Loader.onEnterFrame = function(){
  var loadedBytes = this.empty.getBytesLoaded();
  var totalBytes = this.empty.getBytesTotal();
  var currentframe = this.empty._currentframe;
  var totalframes = this.empty._totalframes;
  if(totalframes > 1){
   if(currentframe == totalframes){
    index++;
    if(index > itemArray.length - 1)
     index = 0;
    delete Movie_Loader.onEnterFrame;
    SwitchMovieClip();
    showBtn(index);
    trace("done");
   }
  }
 }
 }

function btnPress(){
 _root.index = this.index;
 SwitchMovieClip();
 showBtn(index);
}

function showBtn(index){
 var i = 0;
 while(i < itemArray.length){
  _root["btn" + i].gotoAndStop(1);
  i ++;
 }
     _root["btn" + index].gotoAndStop(2);
}

var index = 0;
var itemArray:Array = new Array();
var Loader_Item = "";
var swfPath = "swfCollection.xml";
loadXml(swfPath);

这里做一下说明,这段代码中并没有涉及下载进度及其他高深的技术,纯粹一个门外汉写的,有不足之处还望大家多多包涵,多多指教。:)

Tags: flash,轮播
日志引用地址[]: http://www.ubbcn.com/flog/track.asp?postID=16
相关日志
  • 没有相关日志

没有评论

没有相关评论

发表评论

 
评论内容
说老实话,做开心人,欢迎您留露箴言
您的观点仅代表个人,与本站无关,望请自尊
验证码: 验证码
 
Copyright © 2004-2007 uBBcn.Com 版权所有 Powered by 帅青蛙
感谢huangna提供空间 感谢Mojojo的设计
 闽ICP备05000605号