如何在AS3中正确定位加载的图像

时间:2015-12-23 23:17:30

标签: image actionscript-3 flash

我在尝试重新定位使用Actionscript加载到movieclip的图像时遇到了大量问题。这就是我想要做的事情:

for (var i:int=0; i<roleHeadData[pNum].length; i++) {
        var gap = (sWidth/(roleHeadData[pNum].length+1))*(i+1)-sWidth/2;
        var roleBtn:roleBtn_mc = new roleBtn_mc();
        roleBtn.name = "role"+roleHeadData[pNum][i].shortName+"_mc";
        roleBtn.x = gap;
        roleBtn.buttonMode = true;
        rolePane.addChild(roleBtn);
        var imgPath = roleHeadData[pNum][i].imgRef;
        var roleImg = loadMovie(roleBtn.roleImg, imgPath);
        rolePane.roleBtn =  roleBtn;
        roleBtn.text_txt.text = roleHeadData[pNum][i].title;
        roleImg.x = -(roleImg.width/2);
        roleFunc(roleBtn,i, isHome);
    }

由于没有宽度,图像不会移动。我假设它是因为它尚未加载。出于这个原因,我尝试了装载机重新定位物品。这也不起作用,因为在加载图像时,使用的var不再可用,因此只有最后一个项目被重新定位:

for (var i:int=0; i<roleHeadData[pNum].length; i++) {
        var gap = (sWidth/(roleHeadData[pNum].length+1))*(i+1)-sWidth/2;
        var roleBtn:roleBtn_mc = new roleBtn_mc();
        roleBtn.name = "role"+roleHeadData[pNum][i].shortName+"_mc";
        roleBtn.x = gap;
        roleBtn.buttonMode = true;
        rolePane.addChild(roleBtn);
        var imgPath = roleHeadData[pNum][i].imgRef;
        var roleLoader:Loader;
        roleLoader = new Loader();
        roleLoader.load(new URLRequest(imgPath));
        var roleImg = roleBtn.roleImg;
        roleBtn.roleImg.addChild(roleLoader);
        roleLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{roleLoaded(roleImg)});
        function roleLoaded(mc):void {
            // Load Image
            mc.x = -(mc.width/2);
        }
    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以访问事件的currentTarget属性以获取要居中的Loader对象。

for (var i:int=0; i<roleHeadData[pNum].length; i++) {
    var gap = (sWidth/(roleHeadData[pNum].length+1))*(i+1)-sWidth/2;
    var roleBtn:roleBtn_mc = new roleBtn_mc();
    roleBtn.name = "role"+roleHeadData[pNum][i].shortName+"_mc";
    roleBtn.x = gap;
    roleBtn.buttonMode = true;
    rolePane.addChild(roleBtn);
    var imgPath = roleHeadData[pNum][i].imgRef;
    var roleLoader:Loader;
    roleLoader = new Loader();
    roleLoader.load(new URLRequest(imgPath));
    var roleImg = roleBtn.roleImg;
    roleBtn.roleImg.addChild(roleLoader);
    roleLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, roleLoaded);
}

function roleLoaded(e:Event):void
{        
    var target_mc:Loader = e.currentTarget.loader as Loader;
    target_mc.x = -(target_mc.width/2);
}

另外,请注意我是如何在循环之外移动函数声明的。在循环中声明函数是非常糟糕的做法。