查看: 1854|回复: 2
打印 上一主题 下一主题

Flex为何在Application中无法直接添加Sprite

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-8-31 08:46:31 |只看该作者 |倒序浏览

在flex框架中Uicomponent的继承结构如下:

UIComponent > FlexSprite> Sprite >DisplayObjectContainer>InteractiveObject >Displayobject,
在flash中(Sprite类的继承关系)

Sprite >DisplayObjectContainer>InteractiveObject >Displayobject,

Flex Application里的addChild()
在Flex Application里,是不能直接用addChild添加Sprite,MovieClip等来自flash.display包里的类的。譬如以下代码就会报错:
private function init():void
{   
         var sp:Sprite = new Sprite();  
              addChild(sp);
}


TypeError: Error #1034: 强制转换类型失败:无法将 flash.display::Sprite@156b7b1 转换为 mx.core.IUIComponent。
这是因为Application的addChild方法并非完全继承自DisplayObjectContainer,
Application→LayoutContainer→Container→UIComponent→FlexSprite→Sprite
→DisplayObjectContainer
而是在Container那里被重写了:
public override function addChild(childisplayObject)isplayObject

虽然参数child的类型是DisplayObject,但是它必须实现IUIComponent接口(所有Flex组件都实现了这一接口),才能添加。
如果要在Application里添加Sprite,可以先把它装进一个UIComponent,然后再添加这个UIComponent:
import mx.core.UIComponent;
private function init():void
{   
       var sp:Sprite = new Sprite();   
       var uc:UIComponent = new UIComponent();   
       uc.addChild(sp);  
      addChild(uc);
}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

0

主题

2

听众

3238

积分

中级设计师

Rank: 5Rank: 5

纳金币
0
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-7-10 12:12:04 |只看该作者
thank you!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-11 15:03 , Processed in 0.105508 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部