请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 1946|回复: 12

[AS1&2] 制件动画轮翻播放的时候碰上问题了 [复制链接]

帅青蛙 楼主

垃圾青蛙

荣誉管理 手机认证 

帖子
26082
体力
51517
威望
21
居住地
福建省 厦门市
发表于 2007-4-30 16:52:32 |显示全部楼层
要制作一个动画轮翻播放的效果:
一个大的容器用来动态载入动画,并列出被载入动画的标签,以便用户点击查看感兴趣的动画。当用户没有任何点击的时候,动画按照各自设置好的时间播放,到时间之后就跳转到另外一个动画播放。

这些动画的载入我是使用创建一个空白的MovieClip,然后将动画载入进来。自动播放的时间控制是使用setTimeout/setInterval来控制的。现在的问题是,动画如果比较大,而网速比较慢的时候,播放的时间就不准了,那个动画载入花掉多少时间,这个动画就少播多少时间。而我想要的是,不管这个动画载入花掉多长时间都不影响它的播放时间,不知道怎么解决了。
主要是不知道我这个空白MovieClip什么时候载入完成,望各位高手给些思路。

为避免各位看不懂我在描述什么,贴出代码,从代码逻辑上来帮我分析一下,谢谢。
  1. function loadXml(url)
  2. {
  3.     var rXml = new XML();
  4.     rXml.ignoreWhite = true;
  5.     rXml.load(url);
  6.     rXml.onLoad = function (success)
  7.     {
  8.         if (success)
  9.         {
  10.             itemArray = this.firstChild.childNodes;                       
  11.                         Image_Loader.createEmptyMovieClip("empty",1);
  12.                         if(itemArray.length > 1){
  13.                                 var i = 0;
  14.                                 while (i < itemArray.length)
  15.                                 {
  16.                                   _root.attachMovie("btn", "btn" + i, 1000 + i, {_x: 15 + 25 * i, _y: 120});
  17.                                   _root["btn" + i].txt.text = i + 1;
  18.                                   _root["btn" + i].index = i;
  19.                                   _root["btn" + i].onPress = btnPress;
  20.                                    i++;
  21.                                  }
  22.                                  showBtn(index);
  23.                         }else{
  24.                                 index = 0;
  25.                         }
  26.             SwitchImage();
  27.         }
  28.     };
  29. }

  30. var SwitchImage = function(){
  31.         clearInterval(waitID);
  32.         loadNextPic();
  33.         timeLabel = jumpTime;
  34.         waitID = setInterval(SwitchImage,jumpTime);
  35.         showBtn(index);
  36. }

  37. function loadNextPic()
  38. {
  39.         index++;
  40.         if (index > itemArray.length - 1){
  41.                 index = 0;
  42.         }
  43.         Loader_Item = itemArray[index].attributes;
  44.         Image_Loader.empty.loadMovie(Loader_Item.picUrl);
  45.         Image_Loader.empty.onPress = function(){
  46.                 getUrl(Loader_Item.link,"_blank");
  47.         }
  48.         jumpTime = Loader_Item.time * 1000;
  49. }

  50. function btnPress()
  51. {
  52.         _root.index = this.index;
  53.         clearInterval(waitID);
  54.         Loader_Item = itemArray[index].attributes;
  55.         Image_Loader.empty.loadMovie(Loader_Item.picUrl);
  56.         waitID = setInterval(SwitchImage,Loader_Item.time * 1000);
  57.         timeLabel = Loader_Item.time * 1000;
  58.         showBtn(index);
  59. }

  60. function showBtn(id)
  61. {
  62.            var i = 0;
  63.            while (i < itemArray.length)
  64.            {
  65.                     _root["btn" + i].gotoAndStop(1);
  66.              i++;
  67.             }
  68.             _root["btn" + id].gotoAndStop(2);
  69. }

  70. var index = -1;
  71. var waitID = 0;
  72. var itemArray = new Array();
  73. var Loader_Item;
  74. var jumpTime;
  75. var swfPath;
  76. swfPath = "site_swf.xml";
  77. loadXml(swfPath);
复制代码
新一代四无新人,21世纪低碳男……博客 免费下载易提醒
西部数码顶级域名注册商39元抢注!

寂寞火山

荣誉管理 手机认证 

帖子
2584
体力
10205
威望
197
发表于 2007-4-30 19:22:32 |显示全部楼层
55~~~代码怎么连个注释都没有啊!?害我眼都花了

不过你描述的情况一般都是由于你在点击按钮或者外部动画onLoad的时候没有及时clearInterval,造成时间冲突,按这个思路先自检一下吧,而且最好trace一下,看是否真的clearInterval了。
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

帅青蛙 楼主

垃圾青蛙

荣誉管理 手机认证 

帖子
26082
体力
51517
威望
21
居住地
福建省 厦门市
发表于 2007-4-30 21:47:15 |显示全部楼层
不是没有clearInterval,事实上,这些都正常,之所以动画没有播放完,那是因为动画载入需要时间,这个载入时间也被算到动画播放时间里去了,造成载入花了多长时间,在播放的时候就少放了多长时间。
如果我载入小图片或者被载入的动画比较小,能快速被加载完成并播放的,就一点问题都没有了。
新一代四无新人,21世纪低碳男……博客 免费下载易提醒

使用道具 举报

寂寞火山

荣誉管理 手机认证 

帖子
2584
体力
10205
威望
197
发表于 2007-4-30 22:26:27 |显示全部楼层
那你就在等动画载入完成后先clearInterval,然后再setInterval
其实你这个问题我以前在做图片轮播模型的时候也碰到过,当时我就是这么做的,祝你好运

使用道具 举报

nang 

终极讨厌

金牌会员

帖子
1614
体力
3138
威望
8
发表于 2007-5-1 09:06:42 |显示全部楼层
this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());//创建一个装置装载图片的MC
var mcload:MovieClipLoader = new MovieClipLoader();//MovieClipLoader类
var mclListener:Object = new Object();//申明侦听器
mclListener.onLoadInit = function(target:MovieClip) {//加载成功执行的动作
target.imgload_txt.removeTextField();//一定要删除它,否则加载进度100%的字样会永远显示
target._x = 200;
target._y = 20;
target._width = 780;
target._height = 560;
//在这里设置时间或者播放效果(推荐用TWEEN类)!!!!!!!
};
mclListener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
//trace("文件/"+bytesLoaded+"/"+bytesTotal);
target.createTextField("imgload_txt", 999, 400, 200, 120, 80);
target.imgload_txt.text = "加载进度:"+int(bytesLoaded/bytesTotal*10000)/100+"%";//楼上想要的主要功能在这里实现
//trace(target.imgload_txt.text);
};
mcload.addListener(mclListener);//注册侦听器
mcload.loadClip("展示.swf", image_mc);//加载swf以及图片都可以,这里执行加载动作

使用道具 举报

帅青蛙 楼主

垃圾青蛙

荣誉管理 手机认证 

帖子
26082
体力
51517
威望
21
居住地
福建省 厦门市
发表于 2007-5-8 10:00:17 |显示全部楼层
原帖由 jimohuoshan 于 2007-4-30 22:26 发表
那你就在等动画载入完成后先clearInterval,然后再setInterval
其实你这个问题我以前在做图片轮播模型的时候也碰到过,当时我就是这么做的,祝你好运

问题是不知道被载入的动画什么时候载入完成。
我输播的是动画,不是图片,所以时间是不能统一的,尽管思路是一样的,但是需要监听要播放的动画什么时候被载入完成。
新一代四无新人,21世纪低碳男……博客 免费下载易提醒

使用道具 举报

darkvn 

小混蛋

荣誉管理 手机认证 

帖子
4841
体力
17612
威望
471
发表于 2007-5-8 10:38:27 |显示全部楼层
用MovieClipLoader类

var ListNode:XMLNodes;
var curNode:XMLNodes;
var ContainerMC:MovieClip;
var IntervalID:Number;
var IntervalTimeDelay:Number=5000;
var mcload:MovieClipLoader = new MovieClipLoader();
mcload.addListener(this);

function onLoadInit = function(target:MovieClip) {
    IntervalID=setInterval(this,"GoNext",IntervalTimeDelay);
}
function LoadNode(node:XMLNodes){
    mcload.loadClip(node.nextSbling.attributes.url,ContainerMC);
    curNode=node;
}

function GoNext(){
   clearInterval(IntervalID);
   if(curNode.nextSibling!=null)    curNode=curNode.nextSibling;
      else curNode=ListNode.firstChild;
  LoadNode(curNode);
}

LoadNode(ListNode.firstChild);
hey~同志们还好么?

使用道具 举报

帅青蛙 楼主

垃圾青蛙

荣誉管理 手机认证 

帖子
26082
体力
51517
威望
21
居住地
福建省 厦门市
发表于 2007-5-8 11:06:23 |显示全部楼层
大家可能没有看清我的情况
这里再说明一下。
情况一:我播放的是动画,不同的动画所播放的时间是都不一样的,所以使用统一的时间是不符合要求的。
情况二:动画什么时候被载入完成我不知道(其实这个才是我现在面临的最大问题)。
因为我使用的动态创建一个空白影片来载入动画,所以不能用纯粹的类似于_root.getBytesTotal这样来获取大小,尝试过使用empty.getBytesTotal这种方法来获取,但得到的数据都是0。
新一代四无新人,21世纪低碳男……博客 免费下载易提醒

使用道具 举报

寂寞火山

荣誉管理 手机认证 

帖子
2584
体力
10205
威望
197
发表于 2007-5-8 11:47:55 |显示全部楼层
MovieClipLoader类的onLoadInit方法不但可以在影片被载入完成时触发,而且应该还能获得影片的总帧数,你不需要知道影片播放的总时间,只需要用onEnterFrame侦测影片的当前帧是否为最后一帧来判断影片是否播放完成了。

使用道具 举报

小力

银牌会员

帖子
449
体力
2297
威望
9
发表于 2007-5-8 14:30:56 |显示全部楼层
我觉得你可以使用MovieClipLoader来完成,用onLoadInit来侦测加载完毕,完毕以后才触发你的setInterval来记时,时间到了再转入下一个MovieClioLoader

使用道具 举报

帅青蛙 楼主

垃圾青蛙

荣誉管理 手机认证 

帖子
26082
体力
51517
威望
21
居住地
福建省 厦门市
发表于 2007-5-8 17:26:52 |显示全部楼层
现在我重新改写了,但是很奇怪的是,都没有办法使用MovieClipLoader来跟踪,会是什么原因?
你们所说的onLoadInit我也用了,但是一直都不会触发这个动作,我添加addListener也不行,把Flash帮助里的代码复制进去也不能用,郁闷了。。。
现在使用onEnterFrame来跟踪帧数,起先的几秒钟得到的当前帧跟总帧数是一样的,后面才是正常的,再次郁闷。

[ 本帖最后由 帅青蛙 于 2007-5-8 17:38 编辑 ]
新一代四无新人,21世纪低碳男……博客 免费下载易提醒

使用道具 举报

寂寞火山

荣誉管理 手机认证 

帖子
2584
体力
10205
威望
197
发表于 2007-5-8 19:23:01 |显示全部楼层
我跟你一起郁闷了,还是贴代码出来看看吧!

使用道具 举报

海海

银牌会员

帖子
661
体力
1341
威望
0
发表于 2007-5-8 19:26:39 |显示全部楼层
可以在每个动画的最后一帧发送出一个事件,或者赋个值或者执行一个函数就可以了

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 11:20 , Processed in 0.128745 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部