来自图像源的数据类型是什么

时间:2011-12-29 22:36:07

标签: actionscript-3 flex actionscript flash-builder

对我来说另一个flashbuilder的破坏者......

我有一个带有contstructor的类,它只能改变图像的来源。

    [Bindable]
    [Embed(source='../pictures/test.jpg')]
    private var _picture:Class; 

    public function Test(newSource:*****)
    {
        _picture.source = newSource;
    }

(图像不是图像,而是一个类,我知道这个,它的意思是:-))

问题在于,当我调用构造函数时,让我们说:

var test:Test = new Test(pictureAtStage.source);

Flashbuilder会出错,因为我无法告诉编译器构造函数中的“newSource”数据类型会有什么...

*编辑: 当我使用_picture.source时,嵌入的源似乎没有改变......?

有人知道答案吗?

3 个答案:

答案 0 :(得分:1)

这确实有点令人困惑,它的类型BitmapAsset扩展了Bitmap。所以这些都可行。

答案 1 :(得分:1)

我们在谈论mx.controls.Image吗?如果是这样,那么图像的源可以是:一个类,一个位图(不是一个BitmapData),一个字符串(在这种情况下,假设你想要加载它而不是使用嵌入的一个)。如果你想找到所有这些的共同点,那么Object就是那个类,但是,我宁愿将它限制在特定于你的用例的地方。

但是,如果我可以建议任何事情......不要使用mx.controls.Image,即使对于Flex框架,它也太臃肿了。如果它必须是UIComponent - 扩展UIComponent并让源为BitmapData类型 - 这样你就能够更好地管理资源 - 例如,你可以重用相同的实际图像。然后,您可以使用控件的graphics属性来显示图像。

另一个建议,如果你还在这里:)不要使用[Bindable],特别是它的简短版本,尤其是私有变量 - 你会省去无数个小时的调试挫折。 ..此外,在你的情况下,你无论如何都不会改变那个变量的值......

你还在吗?好吧,不要在变量上使用[Embed],在类定义上使用它 - 稍微为你工作,但这可能会使你的代码更具可移植性。如果你在类上嵌入编译器将不会生成一个愚蠢的“某事物 - 资产”类,它将使用Bitmap或BitmapData - 无论你的类扩展。因此,您不会引入对Flex框架的依赖,并且通常您可以更好地控制代码。

编辑:上面写的是假设_picture(class)变量和_picture(函数中使用的某些变量)不是同一个东西。但如果它们是同一个东西,那么Class类是动态的,这意味着你可以在运行时添加属性(不知道为什么,这是Adobe的设计决定...),但是,编译器将表现得好像不可能,所以你可以通过反射添加属性来解决这个问题:

var _picture:Class = Sprite;
_picture["source"] = whatever;
trace(Sprite["source"]);

答案 2 :(得分:1)

因为我对flashbuilder很新,所以我没有看到明显的解决方案......

我问题第一部分的解决方案(编辑前): 将数据类型设置为Object可以解决问题:

[Bindable]
[Embed(source='../pictures/test.jpg')]
private var _picture:Class; 

public function Test(newSource:Object)
{
    _pucture.source = newSource;
}