关于loading的一些技巧
作者:
关于loading的一些技巧
近日在做一个flash的时候,发现了一个非常奇怪的问题,就是loading的进度条是从64%开始的,而且进度条出现之前,一片空白,但是上传到空间之后,却发现loding完全失效,望各位help一下,我琢磨了2个多小时,头都快大了.以下是前两帧的代码
第一帧:
totalB = _root.getBytesTotal();
loaded = _root.getBytesLoaded();
trace(loaded);
per = Math.round(loaded/totalB*100);
trace(per);
_root.load_bar._xscale = per;
loadper = per+"%";
第二帧:
if(loaded>=totalB){
gotoAndPlay("场景 1",1);
}
else{
gotoAndPlay(1);
}
先谢过了!
stop()
_root.createEmptyMovieClip("Loading_mc",_root.getNextHighestDepth())
Loading_mc.beginFill(0x5f6165)
Loading_mc.moveTo( 0, 10 );
Loading_mc.lineTo( 0, 0 );
Loading_mc.lineTo( 350, 0 );
Loading_mc.lineTo( 350, 10 );
Loading_mc.lineTo( 0, 10 );
Loading_mc._x=200
Loading_mc._y=350
_root.createTextField("Loading_txt",_root.getNextHighestDepth(),200,370,30,20)
Loading_txt.border=false
Loading_txt.multiline = true;
Loading_txt.wordWrap = true;
Loading_mc.onEnterFrame=function(){
if(_root.getBytesLoaded()>=_root.getBytesTotal()){
_root.play()
_root.Loading_mc.removeMovieClip()
_root.Loading_txt.removeTextField()
}else{
_root.Loading_mc._xscale=(_root.getBytesLoaded()/_root.getBytesTotal())*100
_root.Loading_txt.text=int(Loading_mc._xscale).toString()+"%"
_root.Loading_txt._x=Loading_mc._width+200
}
}
放到第1帧就OK了.
代码解读:
1 让影片在第1帧时停止播放;
2 在根路径也就是_root的位置建立一个影片剪辑,它的名称为Loading_mc,它的层深为根路径中现在没有使用的的第一个层深。
3 Loading_mc影片剪辑填充为0x5f6165色;
4~8 将它移动到X:0,Y:10的位置开始绘制,坐标为0~350,高度为10;
9 它的X坐标等于200;
10 它的Y坐标等于300;
11 在根路径建立一个文本字段,它的名称为Loading_txt,它的层深为根路径没有使用的最后一个层深,它的X坐标为200,Y坐标为370,宽度为30,高度为20;
12 它的边框属性border为假,也就是它没有边框;
13 它可以是多行文本;
14 它可以自动换行;
15 当Loading_mc影片剪辑开始播放时,每播放一帧,执行一次以下代码;
16 当根路径已经加载的字节,超过或者等于它的总字节时;
17 根路径开始播放;
18 并且删去Loading_mc这个影片剪辑;
19 删去Loading_txt这个字段;
20 如果条件不成立的话;
21 Loading_mc影片剪辑的宽度缩放比例,等于根路径的已下载字节除以根路径的总字节的值,乘以100;
22 Loading_txt字段的文字内容,等于对宽度缩放比例的值,取整之后,再转换为字符类型,然后加上“%”百分号;
23 而它的坐标等于Loading_mc影片剪辑的宽度加上200。
非常感谢爱老虎油的解答,但是我想我的问题可能有点不一样,因为,即使我在第一帧里加入如下两行
trace("loaded");
stop();
也是过一段满长的时间,才显示loaded,并且进度条停在了64%处,
我想是不是影片加载到64%的时候才开始执行我的代码,我把代码放在场景1,主影片放在场景2
也许我说的不对,仅供参考.
其一,我不知道你用什么版本,但是你的变量没有指定数据类型.
其二,第一帧里检查一下,有什么大东西没有.不要放在第1帧.
其三,_root.load_bar._xscale = per;这句说明per是数值型,但是.loadper = per+"%"未转换数据类型进行操作.
其四,_root.getBytesLoaded();表示什么?本场景的字节吗?如果想全局的话用_global好不.
其五,gotoAndPlay("场景 1",1);使用汉字做场景名称的话,并不是程序推荐的作法.
其六,Math.round()是什么意思?四舍五入吗?不准确吧,换int吧.
总结:其它都是小问题,_root换成_global,可能是主要的问题所在,
第一帧:
totalB = _root.getBytesTotal();
loaded = _root.getBytesLoaded();
trace(loaded);
per = Math.round(loaded/totalB*100);
trace(per);
_root.load_bar._xscale = per;
loadper = per+"%";
第二帧:
if(loaded>=totalB){
gotoAndPlay("场景 1",1);
}
else{
gotoAndPlay(1);
}
先谢过了!
stop()
_root.createEmptyMovieClip("Loading_mc",_root.getNextHighestDepth())
Loading_mc.beginFill(0x5f6165)
Loading_mc.moveTo( 0, 10 );
Loading_mc.lineTo( 0, 0 );
Loading_mc.lineTo( 350, 0 );
Loading_mc.lineTo( 350, 10 );
Loading_mc.lineTo( 0, 10 );
Loading_mc._x=200
Loading_mc._y=350
_root.createTextField("Loading_txt",_root.getNextHighestDepth(),200,370,30,20)
Loading_txt.border=false
Loading_txt.multiline = true;
Loading_txt.wordWrap = true;
Loading_mc.onEnterFrame=function(){
if(_root.getBytesLoaded()>=_root.getBytesTotal()){
_root.play()
_root.Loading_mc.removeMovieClip()
_root.Loading_txt.removeTextField()
}else{
_root.Loading_mc._xscale=(_root.getBytesLoaded()/_root.getBytesTotal())*100
_root.Loading_txt.text=int(Loading_mc._xscale).toString()+"%"
_root.Loading_txt._x=Loading_mc._width+200
}
}
放到第1帧就OK了.
代码解读:
1 让影片在第1帧时停止播放;
2 在根路径也就是_root的位置建立一个影片剪辑,它的名称为Loading_mc,它的层深为根路径中现在没有使用的的第一个层深。
3 Loading_mc影片剪辑填充为0x5f6165色;
4~8 将它移动到X:0,Y:10的位置开始绘制,坐标为0~350,高度为10;
9 它的X坐标等于200;
10 它的Y坐标等于300;
11 在根路径建立一个文本字段,它的名称为Loading_txt,它的层深为根路径没有使用的最后一个层深,它的X坐标为200,Y坐标为370,宽度为30,高度为20;
12 它的边框属性border为假,也就是它没有边框;
13 它可以是多行文本;
14 它可以自动换行;
15 当Loading_mc影片剪辑开始播放时,每播放一帧,执行一次以下代码;
16 当根路径已经加载的字节,超过或者等于它的总字节时;
17 根路径开始播放;
18 并且删去Loading_mc这个影片剪辑;
19 删去Loading_txt这个字段;
20 如果条件不成立的话;
21 Loading_mc影片剪辑的宽度缩放比例,等于根路径的已下载字节除以根路径的总字节的值,乘以100;
22 Loading_txt字段的文字内容,等于对宽度缩放比例的值,取整之后,再转换为字符类型,然后加上“%”百分号;
23 而它的坐标等于Loading_mc影片剪辑的宽度加上200。
非常感谢爱老虎油的解答,但是我想我的问题可能有点不一样,因为,即使我在第一帧里加入如下两行
trace("loaded");
stop();
也是过一段满长的时间,才显示loaded,并且进度条停在了64%处,
我想是不是影片加载到64%的时候才开始执行我的代码,我把代码放在场景1,主影片放在场景2
也许我说的不对,仅供参考.
其一,我不知道你用什么版本,但是你的变量没有指定数据类型.
其二,第一帧里检查一下,有什么大东西没有.不要放在第1帧.
其三,_root.load_bar._xscale = per;这句说明per是数值型,但是.loadper = per+"%"未转换数据类型进行操作.
其四,_root.getBytesLoaded();表示什么?本场景的字节吗?如果想全局的话用_global好不.
其五,gotoAndPlay("场景 1",1);使用汉字做场景名称的话,并不是程序推荐的作法.
其六,Math.round()是什么意思?四舍五入吗?不准确吧,换int吧.
总结:其它都是小问题,_root换成_global,可能是主要的问题所在,