【问题标题】:What is the data type from the source of an image图片来源的数据类型是什么
【发布时间】:2012-01-30 06:02:18
【问题描述】:

对我来说又是一个 flashbuilder 脑筋急转弯...

我有一个类,它的构造函数应该只改变图像的来源。

    [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 时,嵌入的源似乎没有改变......?

有人知道答案吗?

【问题讨论】:

  • 好的,不需要回答这个问题:将数据类型设置为对象就可以了......(我将在八小时内发布答案......因为我是stackoverflow的新手,我可以8 小时内不回答我的问题)

标签: actionscript-3 apache-flex actionscript flash-builder


【解决方案1】:

这确实有点令人困惑,它将是扩展BitmapBitmapAsset 类型。所以其中任何一个都可以。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 我想要达到的目标是将我自己的自定义项目符号添加到 AMChart。你可以在这里找到一个例子:flex.amcharts.com/lib/examples/customBulletsV4.mxml 这里的自定义项目符号似乎是一个类(嵌入了 *.swf 源)所以我认为我的“自定义项目符号”也必须是一个类......
    • 图形的数据提供者是一个包含我自己定义的类的列表(所以 _picture 是这个类的一个元素(变量)),搜索给出图片的 getter(在这种情况下我做了getter 返回一个类)
    • 就是这样:我不希望嵌入“custombullet”,因为它需要由用户在图表中的每个元素中选择...我试图创建 _picture以可以读取“图像源”的方式进行类。到目前为止,我没有成功创建 _picture 类看起来像一个嵌入的类...我想我需要从类中设置位图数据才能更改图片(项目符号)
    【解决方案3】:

    由于我是 flashbuilder 的新手,我没有看到明显的解决方案...

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

    [Bindable]
    [Embed(source='../pictures/test.jpg')]
    private var _picture:Class; 
    
    public function Test(newSource:Object)
    {
        _pucture.source = newSource;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2012-05-16
      相关资源
      最近更新 更多