来自LIBRARY的动态图像!

时间:2010-09-07 01:58:16

标签: flash actionscript-3

尝试从库外部动态加载图像,因为我希望在网站启动时加载这些图像。基本上我有几个按钮,每个按钮返回一个事件,抛出一个特定的图像名称来抓取。这是函数;

function sendDisplayData(e:MouseEvent){
    display_mc.displayName.text = e.currentTarget.parent.menuItemName.text; //name of image eg. "myImageName" in the library;

    //create the image object 
    var imgObj:Object = e.currentTarget.parent.menuItemName.text;
    addChild(imgObj);
}

所以基本上在调用函数时,我想将名称实例化为库中实际动画片段的名称。以下功能有效但仅适用于一张图像。

function sendDisplayData(e:MouseEvent){
    display_mc.displayName.text = e.currentTarget.parent.menuItemName.text;

    //create the image object 
    var image:Salads = new Salads(); //the class of the image is "Salads"
    display_mc.addChild(Salads);
} 

那么如何通过使用String然后从库中获取与该字符串相关的图像来使该函数动态化。

2 个答案:

答案 0 :(得分:2)

另一种选择是使用getDefinitionByName

function getDisplayObject(linkage:String):DisplayObject {
    var clazz:Class = getDefinitionByName(linkage) as Class;
    return new clazz();
}

因此,如果您已经拥有正确的链接名称,则可以执行以下操作:

function sendDisplayData(e:MouseEvent){
    //create the image object 
    var imgObj:DisplayObject = getDisplayObject(e.currentTarget.parent.menuItemName.text);
    addChild(imgObj);
}

答案 1 :(得分:1)

有许多选项,其中一个更简单,但不是很灵活。

public class Inventory
{
    public static function getMovieClipByName(value:String):MovieClip
    {
       switch(value )
       {
          case "Salads":
            return new Salads();
            break;

          //etc....

          default:
            return null;
     }
   }
}

您还可以将所有图像对象放入数组中,确保为每个图像对象分配一个名称,然后使用Array some()方法查找与该名称对应的对象并将其返回。

然后你可以这样做:

function sendDisplayData(e:MouseEvent){
    var _name:String = display_mc.displayName.text = e.currentTarget.parent.menuItemName.text;

    //create the image object 
    var image:MovieCLip = Inventory.getMovieClipByName(_name);
    display_mc.addChild(image);
}