对于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:
日志引用地址[]:
相关日志
没有评论
没有相关评论