请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 新增登录提醒插件 - 用至我的站点 地图任务一定要做 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

MIUI手机主题设计大赛,奔驰大奖等你拿! 想加薪?!蓝色理想招聘提供你更多机会 悬赏答疑,赚取积分兑奖品!

查看: 1156|回复: 1

[AS1&2] [AS1]三帧代码实现图片轮换显示 [复制链接]

kinglong 楼主

Flash编程达人

荣誉管理 手机认证 

帖子
428
体力
8145
威望
93
发表于 2007-7-8 10:13:47 |显示全部楼层
[AS1]三帧代码实现图片轮换显示
原文地址:http://www.klstudio.com/post/135.html
本来这段代码是写给我的一个网友[Flash留级生],因为她只会写AS1代码,所以我不得不改一下AS3代码规范,去除面向对象习惯,在时间帧上来实现“图片轮换显示”功能。虽刚开始还有些不习惯原来AS1的写法,但总算把它写完成了。为了让那位网友知道代码的意思,我基本上是每一行都加上注释的,这个算是我加注释最多的一次吧。虽说是AS1简单代码,但里面图片加载算法还是比较实用的,我自己也觉得整段代码中,这个属于最精华的了。如果有兴趣,你可以分析一下!本来这段代码只是写给那位网友,我想既然写了,那也分享大家吧。希望这段代码能让那些刚接触Flash编程的朋友有点帮助吧!
第1帧代码
  1. //====================================================;
  2. //初始化数据;
  3. //====================================================;
  4. //图片地址数组;
  5. var pics = ["star1.jpg", "star2.jpg", "star3.jpg", "star4.jpg", "star5.jpg", "star6.jpg", "star7.jpg", "star8.jpg", "star9.jpg", "star10.jpg", "star11.jpg", "star12.jpg"];
  6. //图片数组;
  7. var datas = [];
  8. //图片数组显示指针;
  9. var p = 0;
  10. //最大循环次数;
  11. var mac = 2;
  12. //循环次数变量;
  13. var c = 0;
  14. //最大等待次数;
  15. var mai = 20;
  16. //等待次数变量;
  17. var i = 0;
  18. //预加载图片函数;
  19. function preload(url) {
  20.         //新建影片剪辑;
  21.         var mc = this.createEmptyMovieClip("pic_"+datas.length, datas.length+1);
  22.         //将图片移出可见范围;
  23.         mc._x = mc._y = -20000;
  24.         //加载图片;
  25.         mc.loadMovie(url);
  26.         //存入数组中;
  27.         datas.push(mc);
  28.         //判断onEnterFrame事件是否定义;
  29.         if (this.onEnterFrame == undefined) {
  30.                 //未定义,则定义onEnterFrame事件;
  31.                 this.onEnterFrame = doEnterFrame;
  32.         }

  33. }
  34. //清除所有的图片;
  35. function removeDatas(){
  36.         for(var i =0;i<datas.length;i++){
  37.                 var mc = datas[i];
  38.                 //删除图片影片剪辑;
  39.                 mc.removeMovieClip();
  40.                 delete mc;
  41.         }
  42. }
  43. //帧方法;
  44. function doEnterFrame() {
  45.         //设置变量mc(值为正在加载的影片剪辑,即为datas数组最后一元素);
  46.         var mc = datas[datas.length-1];
  47.         //判断图片是否加载完成;
  48.         if (mc._width>0 && mc.getBytesLoaded()>=mc.getBytesTotal()) {
  49.                 //不显示图片;
  50.                 mc._alpha = 0;
  51.                 //初始化定义图片位置;
  52.                 mc._x = mc._y=0;
  53.                 //判断所有的图片是否加载完成;
  54.                 if (datas.length<pics.length) {
  55.                         //未加载完成,继续加载图片;
  56.                         preload(pics[datas.length]);
  57.                 } else {
  58.                         //加载完成,则删除onEnterFrame事件;
  59.                         delete this.onEnterFrame;
  60.                 }
  61.         }
  62. }
  63. //调用图片加载函数;
  64. preload(pics[0]);
复制代码

第2帧代码
  1. //检测是否超过最大循环次数;
  2. if (c<mac) {
  3.         //检测是否超过可显示图片数组长度;
  4.         if (p<datas.length) {
  5.                 //将要显示的新影片剪辑;
  6.                 var new_mc = datas[p];
  7.                 //检测new_mc透明度是否在100以下;
  8.                 if (new_mc._alpha<100) {
  9.                         //透明度递增5;
  10.                         new_mc._alpha += 5;
  11.                         //定义将要隐藏的老影片剪辑;
  12.                         var old_mc;
  13.                         //如是图片数组指针大于0的话
  14.                         if (p>0) {
  15.                                 //老影片剪辑就为上一个图片;
  16.                                 old_mc = datas[p-1];
  17.                         } else {
  18.                                 //如果循环次数大于0的话;
  19.                                 if (c>0) {
  20.                                         //老影片剪辑就为图片数据最后的一个元素;
  21.                                         old_mc = datas[datas.length-1];
  22.                                 }
  23.                         }
  24.                         //对老影片剪辑进行处理;
  25.                         if (old_mc != undefined && old_mc._alpha>0) {
  26.                                 //透明度递减8;
  27.                                 old_mc._alpha -= 8;
  28.                         } else {
  29.                                 if (old_mc._alpha != 0) {
  30.                                         old_mc._alpha = 0;
  31.                                 }
  32.                         }
  33.                 } else {
  34.                         //显示变量是否超过最大显示次数;
  35.                         if (i<mai) {
  36.                                 //显示次数递增;
  37.                                 i++;
  38.                         } else {
  39.                                 //初始化显示次数;
  40.                                 i = 0;
  41.                                 //图片数组指针递增;
  42.                                 p++;
  43.                         }
  44.                 }
  45.         } else {
  46.                 //循环次数递增;
  47.                 c++;
  48.                 //初始化图片数组指针;
  49.                 p = 0;
  50.         }
  51. } else {
  52.         //对老影片剪辑的处理;
  53.         var old_mc = datas[datas.length-1];
  54.         //检测影片剪辑的透明度是否大于0;
  55.         if (old_mc._alpha>0) {
  56.                 //透明度递减8;
  57.                 old_mc._alpha -= 8;
  58.         } else {
  59.                 //删除所有的图片数组里的影片剪辑;
  60.                 removeDatas();
  61.                 //停止当前影片剪辑时间轴的运行;
  62.                 stop();
  63.         }
  64. }
复制代码

第3帧代码
  1. //跳转第2帧;
  2. gotoAndPlay(2);
复制代码
Kinglong 's Blog
专注研究Flash,FCS/FMS,CF,JS,AS,Java,C#等相关技术
西部数码云主机4G内存500G仅需423元
ybhm 

烟波浩渺

中级会员

帖子
100
体力
332
威望
0
居住地
湖南省 岳阳市
发表于 2007-7-8 11:06:50 |显示全部楼层
ok!very good!
租服务器,上51IDC

使用道具 举报

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


Archiver|手机版|blueidea.com ( 京ICP备05002321号 )    

GMT+8, 2012-5-25 15:02 , Processed in 0.126639 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部