【问题标题】:Loading more than one child image AS3加载多个子图像 AS3
【发布时间】:2015-02-19 05:08:45
【问题描述】:

我正在尝试将 2 个图像加载到我的 Flash 文件中,但出现错误 - 对于此 AS3 的新用户,任何帮助将不胜感激!

得到错误:5 1151:与命名空间内部的定义请求存在冲突。

var myImage:String = dynamicContent.Profile[0].propImage.Url;
var myImage2:String = dynamicContent.Profile[0].prop2Image.Url;

var myImageLoader:StudioLoader = new StudioLoader();
var request:URLRequest = new URLRequest(enabler.getUrl(myImage));
myImageLoader.load(request);
myImageLoader.x =17;
myImageLoader.y = 0;

var myImageLoader2:StudioLoader = new StudioLoader();
var request:URLRequest = new URLRequest(enabler.getUrl(myImage2));
myImageLoader.load(request);
myImageLoader.x =17;
myImageLoader.y = 0;

if(this.currentFrame == 1) {
     addChildAt(myImageLoader, 2);
}

if(this.currentFrame == 2) {
     addChildAt(myImageLoader2, 2);
}

【问题讨论】:

    标签: actionscript-3 flash addchild


    【解决方案1】:

    将重复的代码移动到自己的函数中而不是复制+粘贴通常是个好主意:

    function loadImage(file:String, x:Number, y:Number):StudioLoader{
        var myImageLoader:StudioLoader = new StudioLoader();
        var request:URLRequest = new URLRequest(file);
        myImageLoader.load(request);
        myImageLoader.x = x;
        myImageLoader.y = y;
        return myImageLoader;
    }
    addChild(loadImage(enabler.getUrl(myImage1),17,0));
    addChild(loadImage(enabler.getUrl(myImage2),17,0));
    

    这不仅为您提供了更好的结构化代码,还解决了重复变量定义问题,因为在函数内部本地定义的内容保留在函数内部。

    这可能会提供一些见解:

    http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/functions.html

    【讨论】:

    • 你知道怎么添加图片的大小吗?我对几个不同大小的横幅使用相同的图像,因为它被拉伸到整个东西上...... myImageLoader.height = 200;例如不工作
    • 需要等到图片加载完毕后才能设置大小。见stackoverflow.com/questions/3792979/…
    【解决方案2】:

    你不能创建一个与现有变量同名的新变量,在你的情况下,我说的是你的URLRequest request,所以为了避免这种类型的错误,你可以这样做:

    var myImageLoader2:StudioLoader = new StudioLoader();
    // assing a new URLRequest to an existing var
    request = new URLRequest(enabler.getUrl(myImage2));
    // here you want use the myImageLoader2, not myImageLoader
    myImageLoader2.load(request);
    myImageLoader2.x =17;
    myImageLoader2.y = 0;
    

    或者:

    var myImageLoader2:StudioLoader = new StudioLoader();
    // create a new URLRequest var, so the name should be different
    var request2:URLRequest = new URLRequest(enabler.getUrl(myImage2));
    // here you want use the myImageLoader2, not myImageLoader
    myImageLoader2.load(request2);
    myImageLoader2.x =17;
    myImageLoader2.y = 0;
    

    【讨论】:

      【解决方案3】:

      此外,我注意到在第二个块中您声明了 myImageLoader2,但随后您使用原始的 myImageLoader 来执行加载请求。所以即使你声明了一个新的 URLRequest,你也不会加载两个图像。

      Akmozo 的解决方案已更正此问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多