+ -
当前位置:首页 → 问答吧 → 老是加载一张图片,及loading不成功。[已解决]

老是加载一张图片,及loading不成功。[已解决]

时间:2010-11-30

来源:互联网

结合XML做一个5张图片的展示。具体效果是,点击小图,出现对应的大图,出现大图后,下面的小图不可点击,若在点击大图,关闭大图,下面的下图才可以继续点击。
现在出现一些问题,请教各位大虾。
构成如下:
场景中有5个MC,用来装载小图,名称分别为:thumb0_mc到thumb5_mc  
还有一个MC,用来装载大图,名称为: imgLoad_mc
还有5个表示loading的MC,名称分别为:loading0到loading5
现在可以加载小图进来,并且可以点击了,但是老是只能加载一张同样的大图。而且loading不成功。


问题一:
加载小图时,为什么需要多次动态创建多个空MC来加载,才可以点击呢。若我直接
              mcLoader.loadClip(mythumb,thumbLoadMc);
              thumbLoadMc.onRelease = function() {
              trace("aa");
};
小图虽然可以加载进来,但是却不能点击。

问题二:点击加载大图,为什么老是加载同一张呢。
问题三:loading为什么不成功呢。


FLASH代码:
复制内容到剪贴板
代码:
stop();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(ok) {
    if (ok) {
        loadXML(aboutXML);
    } else {
        trace("Error");
    }
};
my_xml.load("about.xml");
function loadXML(aboutXML) {
    var all = my_xml.firstChild.childNodes[0].childNodes;
    var myPic = all[0].childNodes;
    trace(myPic.length);
    for (var i = 0; i<myPic.length; i++) {
        var currentPicture = myPic[i];
        //解析小图
        var mythumb = currentPicture.attributes.thumbPath;
        trace(mythumb);
        //解析大图
        var mybig = currentPicture.attributes.bigPath;
        trace(mybig);
        //场景上的5个装载小图的空MC。
        var thumbLoadMc = this["thumb"+i+"_mc"];
        trace(thumbLoadMc);
        //5个loading...
        var loading_mc = this["loading"+i];
        trace(loading_mc);
        //创建thumbnail_mc用来装载载入缩略的mc.
        var currentThumb_mc = thumbLoadMc.createEmptyMovieClip("thumbnail_mc"+i, i);
        //在thumbnail_mc内部创建movieClip,用来载入图像。
        currentThumb_mc.createEmptyMovieClip("thumb_container",0);
        //开始载入全部小图。
        mcLoader.loadClip(mythumb,currentThumb_mc.thumb_container);
        //小图点击,加载大图。
        currentThumb_mc.onRelease = function() {
            mcLoader.loadClip(mybig,imgLoad_mc);
            trace(mybig);
        };
    }
}
var loadListener:Object = new Object();
loadListener.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number):Void  {
};
loadListener.onLoadInit = function(target_mc:MovieClip):Void  {
};
loadListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void  {
    var percent = Math.round((bytesLoaded/bytesTotal*100))+"%";
    trace(percent);
    loading_mc._yscale = percent;
    if (bytesLoaded == bytesTotal) {
        loading_mc._visible = false;
    }
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);
XML结构如下:
复制内容到剪贴板
代码:
<?xml version="1.0" encoding="UTF-8"?>
<menu>
    <menuitems sourceurl="http://www.g.cn">
        <item type="picture">
            <mypicture thumbPath="thumb1.jpg" bigPath="big1.jpg"></mypicture>
            <mypicture thumbPath="thumb1.jpg" bigPath="big1.jpg"></mypicture>
            <mypicture thumbPath="thumb2.jpg" bigPath="big2.jpg"></mypicture>
            <mypicture thumbPath="thumb2.jpg" bigPath="big2.jpg"></mypicture>             
            <mypicture thumbPath="thumb1.jpg" bigPath="big1.jpg"></mypicture>             
        </item>
        <item type="news">
            <species>标题一</species>
            <description>
                <![CDATA[说明说明说明说明说明说明说明说明说明说明说明说明说明说明说明]]>
            </description>
        </item>
        <item type="news">
            <species>标题二</species>
            <description>
                <![CDATA[说明说明说明说明说明说明说明说明说明说明说明说明说明说明说明]]>
            </description>
        </item>
        <item type="news">
            <species>标题三</species>
            <description>
                <![CDATA[说明说明说明说明说明说明说明说明说明说明说明说明说明说明说明]]>
            </description>
        </item>
    </menuitems>
</menu>

附件

xml问题.rar (87.09 KB)

2010-11-30 17:28, 下载次数: 1

作者: 568041915   发布时间: 2010-11-30

楼主的文件结构很不合理。
复制内容到剪贴板
代码:
stop();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(ok) {
    if (ok) {
        loadXML(aboutXML);
    } else {
        trace("Error");
    }
};
my_xml.load("about.xml");
var thumbsArray:Array =[];
function openThumbs(_b:Boolean ){
    var _t:Number =thumbsArray.length;
    while(_t--)    thumbsArray[_t].enabled =_b;
}
function loadXML(aboutXML) {
    var all = my_xml.firstChild.childNodes[0].childNodes;
    var myPic = all[0].childNodes;
    trace(myPic.length);
    for (var i = 0; i<myPic.length; i++) {
        var currentPicture = myPic[i];
        //解析小图
        var mythumb = currentPicture.attributes.thumbPath;
        trace(mythumb);
        //解析大图
        var mybig = currentPicture.attributes.bigPath;
        trace(mybig);
        //场景上的5个装载小图的空MC。
        var thumbLoadMc = this["thumb"+i+"_mc"];
        trace(thumbLoadMc);
        //5个loading...
        var loading_mc = this["loading"+i];
        trace(loading_mc);
        //创建thumbnail_mc用来装载载入缩略的mc.
        var currentThumb_mc = thumbLoadMc.createEmptyMovieClip("thumbnail_mc"+i, i);
        //在thumbnail_mc内部创建movieClip,用来载入图像。
        currentThumb_mc.createEmptyMovieClip("thumb_container",0);
        //开始载入全部小图。
        mcLoader.loadClip(mythumb,currentThumb_mc.thumb_container);
        currentThumb_mc.jb=mybig;
        //小图点击,加载大图。
        currentThumb_mc.onRelease = function() {
            mcLoader.loadClip(this.jb,imgLoad_mc);
            openThumbs(false);
        };
        thumbsArray.push (currentThumb_mc);
    }
}
this.onLoadInit = function(target_mc:MovieClip):Void  {
    if(target_mc==imgLoad_mc){
        imgLoad_mc.onRelease =function(){
            mcLoader.unloadClip(this);
            openThumbs(true);
        }
    }else{
        this["loading"+target_mc._parent._name.substr(-1)]._visible=false;
    }
};
this.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void  {
    var percent = Math.round((bytesLoaded/bytesTotal*100));
    this["loading"+target_mc._parent._name.substr(-1)]._xscale = percent;
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);

作者: flash023   发布时间: 2010-11-30

非常感谢终极版主的解答。
小弟还有疑惑。
一是,文件结构不合理,那些方面呢。代码和XML规划都不合理么。该怎么做才比较合理呢。
二是,你的代码中有个非常关键的 currentThumb_mc.jb=mybig;  我若把这句加到我原来的代码中,也就可以加载对应的大图了。为什么要这样呢。
三是,加载小图时,为什么需要多次动态创建多个空MC来加载,才可以点击呢。若我直接
              mcLoader.loadClip(mythumb,thumbLoadMc);
              thumbLoadMc.onRelease = function() {
              mcLoader.loadClip(this.jb,imgLoad_mc);
};
就点击不了。thumbLoadMc就是那些加载小图的MC呀,点击它不行么?

作者: 568041915   发布时间: 2010-11-30

1  既然是XML控制图片信息,舞台上就不应该放几个死的容器来装图片。loading也最好放到各自的容器当中去。只做一个,然后用 attachMovie导出。
2  动态属性(回答次数太多,不想再做重复,可搜索)。
3  一个MC要加载外部文件,它的一切事件,动态添加的属性都会被清空。要么创建子MC去加载,要么加载成功才添加事件。

作者: flash023   发布时间: 2010-11-30