我正在使用以下功能将一些图像从库添加到舞台。
function AddImage(image_name:String):void {
if(image_count == 4) return;
// change the following line so it uses "image_name"
var defaultImage:added_1 = new added_1(100, 100);
var tmpImage:Bitmap = new Bitmap(defaultImage);
tmpImage.x = 124.5 + (108.5 * image_count);
tmpImage.y = 1511.9;
addChild(tmpImage);
image_count++;
}
我希望能够将图像名称作为字符串参数传递给函数,但似乎无法弄清楚如何执行此操作。
有人能帮助我吗?
答案 0 :(得分:0)
您要做的是通过使用getDefinitionByName获取类定义,以便您可以创建实例,以下代码是您如何做到的:
// you'll need to add this import to use getDefinitionByName
import flash.utils.getDefinitionByName;
function AddImage(image_name:String):void {
if(image_count == 4) return;
// this next line gets the class definition of the image_name
var imageClass:Class = getDefinitionByName(image_name) as Class;
// this is how you create an instance of that class
var defaultImage:BitmapData = new imageClass(100, 100);
var tmpImage:Bitmap = new Bitmap(defaultImage);
tmpImage.x = 124.5 + (108.5 * image_count);
tmpImage.y = 1511.9;
addChild(tmpImage);
image_count++;
}
更改是导入:
import flash.utils.getDefinitionByName;
这两行:
var imageClass:Class = getDefinitionByName(image_name) as Class;
var defaultImage:BitmapData = new imageClass(100, 100);
注意--- 还要提一下,在某些情况下,如果您使用Flex进行编译而不是Flash IDE,则可能会遇到问题,您可能会遇到以下错误:
ReferenceError: Error #1065: Variable <YourImageClassName> is not defined.
处理这种情况的方法是在编译器的类变量声明中声明一个变量,以便识别该符号。
因此,如果您的两个图像类名称是image_1和image_2,那么在您的类声明中,您将执行以下操作:
private var forCompiler1:image_1;
private var forCompiler2:image_2;
如果您有大量图像,这可能会很痛苦,但这是我发现让编译器识别它们的唯一方法。 :/哈哈