6

解决方案:

如果你有同样的问题,addElement()而不是 addChild() 是什么


我正在尝试从 mxml 转移到 actionsctipt。我有一个<s:Rect>我已经创建并设置了它的属性,但是在添加它时遇到了麻烦。

var aRect:Rect = new Rect();
//set properties like aRect.x, aRect.y, aRect.width, aRect.height

//tried adding it various ways
addChild(aRect);
Application.addChild(aRect);
Application.application.addChild(aRect);
stage.addChild(aRect);

但我不断收到错误 1067:将 spark.primitives:Rect 类型的值隐式强制转换为不相关的类型 flash.display:DisplayObject

最初在 mxml 中,它就在里面,<s:Application>没有嵌套在任何东西里面

<s:Application>

    <s:Rect id="aRect" x="10" y="10" width="15%" height="15%">
         //then fill code here, removed for readability
    </s:Rect>

</s:Application>

有什么关系,我认为actionscript会比mxml更好。

4

5 回答 5

2

尝试更改addChild(aRect);addElement(aRect);,效果很好。

于 2010-03-19T17:08:57.473 回答
1

这是因为 Flex 4 显着改变了显示层次结构在基于 MXML 的应用程序中的工作方式。这有点令人困惑,因为 addChild() 不再像您希望的那样简单 - 您必须将元素添加到数据提供者,然后显示这些元素的逻辑(哪些元素添加到哪里,如何给它们蒙皮等)在其他地方处理。不过,这是一种有用的改变,因为它迫使你以一种非常具体的方式分离你的关注点。将元素全部添加到 dataProvider 后,您可以随意(甚至在运行时)换出 Layout 对象以更改应用程序的外观。

编辑:从技术上讲,他们改变的不是 displayList 本身。事实上,Flex 使用的基本单位现在是“组”——甚至 s:Application 扩展组。您将您的内容添加到一个组(或顶级应用程序),然后为该组分配一个布局,告诉它如何显示您添加的项目。

于 2010-03-19T17:12:11.527 回答
0

是的,您需要一个 DisplayObject。我对 spark.primitives.Rect 不熟悉,但也许你可以创建一个新的 Sprite 并在其 Graphics 对象上调用方法来绘制矩形?

于 2010-03-19T16:57:24.680 回答
0

根据现场文档,Application 类的 addChild 方法确实要求它是一个 displayObject。

于 2010-03-19T16:58:24.810 回答
0

恼人的是,我们经常会很难使用 addElement 添加 Flash 资产 (swf swc)(显示对象)。

我现在正在研究一种方法来做到这一点:(更多的篮球和跳跃

此外,我的 swc 在包资源管理器中不可见(为什么不?)

于 2010-05-12T00:36:54.613 回答