- 在线时间
- 270 小时
- 专家
- 0
- UID
- 33446
- 注册时间
- 2002-10-22
- 帖子
- 428
- 精华
- 4
- 积分
- 1170
- 离线
- 574 天
专长: JAVA ,ActionScript,系统分析
- 帖子
- 428
- 体力
- 8145
- 威望
- 93
|
[AS1]三帧代码实现图片轮换显示
原文地址:http://www.klstudio.com/post/135.html
本来这段代码是写给我的一个网友[Flash留级生],因为她只会写AS1代码,所以我不得不改一下AS3代码规范,去除面向对象习惯,在时间帧上来实现“图片轮换显示”功能。虽刚开始还有些不习惯原来AS1的写法,但总算把它写完成了。为了让那位网友知道代码的意思,我基本上是每一行都加上注释的,这个算是我加注释最多的一次吧。虽说是AS1简单代码,但里面图片加载算法还是比较实用的,我自己也觉得整段代码中,这个属于最精华的了。如果有兴趣,你可以分析一下!本来这段代码只是写给那位网友,我想既然写了,那也分享大家吧。希望这段代码能让那些刚接触Flash编程的朋友有点帮助吧!
第1帧代码
- //====================================================;
- //初始化数据;
- //====================================================;
- //图片地址数组;
- 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"];
- //图片数组;
- var datas = [];
- //图片数组显示指针;
- var p = 0;
- //最大循环次数;
- var mac = 2;
- //循环次数变量;
- var c = 0;
- //最大等待次数;
- var mai = 20;
- //等待次数变量;
- var i = 0;
- //预加载图片函数;
- function preload(url) {
- //新建影片剪辑;
- var mc = this.createEmptyMovieClip("pic_"+datas.length, datas.length+1);
- //将图片移出可见范围;
- mc._x = mc._y = -20000;
- //加载图片;
- mc.loadMovie(url);
- //存入数组中;
- datas.push(mc);
- //判断onEnterFrame事件是否定义;
- if (this.onEnterFrame == undefined) {
- //未定义,则定义onEnterFrame事件;
- this.onEnterFrame = doEnterFrame;
- }
- }
- //清除所有的图片;
- function removeDatas(){
- for(var i =0;i<datas.length;i++){
- var mc = datas[i];
- //删除图片影片剪辑;
- mc.removeMovieClip();
- delete mc;
- }
- }
- //帧方法;
- function doEnterFrame() {
- //设置变量mc(值为正在加载的影片剪辑,即为datas数组最后一元素);
- var mc = datas[datas.length-1];
- //判断图片是否加载完成;
- if (mc._width>0 && mc.getBytesLoaded()>=mc.getBytesTotal()) {
- //不显示图片;
- mc._alpha = 0;
- //初始化定义图片位置;
- mc._x = mc._y=0;
- //判断所有的图片是否加载完成;
- if (datas.length<pics.length) {
- //未加载完成,继续加载图片;
- preload(pics[datas.length]);
- } else {
- //加载完成,则删除onEnterFrame事件;
- delete this.onEnterFrame;
- }
- }
- }
- //调用图片加载函数;
- preload(pics[0]);
复制代码
第2帧代码
- //检测是否超过最大循环次数;
- if (c<mac) {
- //检测是否超过可显示图片数组长度;
- if (p<datas.length) {
- //将要显示的新影片剪辑;
- var new_mc = datas[p];
- //检测new_mc透明度是否在100以下;
- if (new_mc._alpha<100) {
- //透明度递增5;
- new_mc._alpha += 5;
- //定义将要隐藏的老影片剪辑;
- var old_mc;
- //如是图片数组指针大于0的话
- if (p>0) {
- //老影片剪辑就为上一个图片;
- old_mc = datas[p-1];
- } else {
- //如果循环次数大于0的话;
- if (c>0) {
- //老影片剪辑就为图片数据最后的一个元素;
- old_mc = datas[datas.length-1];
- }
- }
- //对老影片剪辑进行处理;
- if (old_mc != undefined && old_mc._alpha>0) {
- //透明度递减8;
- old_mc._alpha -= 8;
- } else {
- if (old_mc._alpha != 0) {
- old_mc._alpha = 0;
- }
- }
- } else {
- //显示变量是否超过最大显示次数;
- if (i<mai) {
- //显示次数递增;
- i++;
- } else {
- //初始化显示次数;
- i = 0;
- //图片数组指针递增;
- p++;
- }
- }
- } else {
- //循环次数递增;
- c++;
- //初始化图片数组指针;
- p = 0;
- }
- } else {
- //对老影片剪辑的处理;
- var old_mc = datas[datas.length-1];
- //检测影片剪辑的透明度是否大于0;
- if (old_mc._alpha>0) {
- //透明度递减8;
- old_mc._alpha -= 8;
- } else {
- //删除所有的图片数组里的影片剪辑;
- removeDatas();
- //停止当前影片剪辑时间轴的运行;
- stop();
- }
- }
复制代码
第3帧代码
|
|