flash组件为何都继承至Sprite
不知道你说的 “外界” 是什么。Sprite 是 AS3中 最基本的显示容器,支持绘图特性,支持容器特定,自动管理 zorder。没有比它更适合做基本容器的了。SpriteSprite 类是基本显示列表构造块:一个可显示图形并且也可包含子项的显示列表节点。 Sprite 对象与影片剪辑类似,但没有时间轴。Sprite 是不需要时间轴的对象的相应基类。例如,Sprite 将是通常不使用时间轴的用户界面 (UI) 组件的逻辑基类。
看看几个竞争者:DisplayObject 和 DisplayObjectContainerDisplayObjectContainer 类是可用作显示列表中显示对象容器的所有对象的基类。该显示列表管理 Flash 运行时中显示的所有对象。使用 DisplayObjectContainer 类排列显示列表中的显示对象。每个 DisplayObjectContainer 对象都有自己的子级列表,用于组织对象的 Z 轴顺序。Z 轴顺序是由前至后的顺序,可确定哪个对象绘制在前,哪个对象绘制在后等。 DisplayObject 是一种抽象基类;因此,不能直接调用 DisplayObject。调用 new DisplayObject() 会引发 ArgumentError 异常。 DisplayObjectContainer 类是可以包含子对象的所有对象的抽象基类。无法直接对其进行实例化;调用 new DisplayObjectContainer() 构造函数会引发 ArgumentError 异常。 有关详细信息,请参阅《ActionScript 3.0 开发人员指南》中的“显示编程”一章。你看,这个基类其实不适合做UI的基类。MovieClipMovieClip 类从以下类继承而来:Sprite、DisplayObjectContainer、InteractiveObject、DisplayObject 和 EventDispatcher。 【flash组件为何都继承至Sprite】 不同于 Sprite 对象,MovieClip 对象拥有一个时间轴。
UI 也不需要时间轴。如果像你所说的:组件控制器可不继承任何的显示对象类,只需要持有皮肤的引用。这就是具体的设计思路了。无论你结构上怎么设计,最终依然是需要一个显示对象将其渲染出来的。这就离不开 Sprite。若要参考皮肤的机制,Flex 的架构值得看一下。就我个人感受,AS3 这种语言,太复杂的结构会大幅拉低性能。具体你看看 Flex 的性能和 Pure AS3的性能比较就知道了。Adobe 甚至为了 Mobile 单独设计了一套 Flex 的 Mobile skin,也是性能原因。当时 Adobe 放弃了 mx 组件而改用 spark 组件,也是性能原因。但这套新的 spark 组件和 Mobile only skin,其实性能也不好。所以,若要设计 AS3 的 UI 系统,我还是建议尽量简单,不要太复杂的机制,这样,直接继承 Sprite 就是最好的选择了。
■网友
如果只显示没有鼠标交互事件,可以不用sprite
推荐阅读
- #补贴#江阴为何迟迟没执行?|解忧帮 无锡:机动车报废有补贴
- OC为何跌出语言榜前十
- 何能|布局素质教育 教育巨头为何能迅速推进?
- 汽车|把车越卖越贵,全新领克01为何可以这样?
- 阿里程序员网上招人的情况为何如此多见
- 心流西春|为何你的后半箱油总是不耐用?油是正经油,问题可能出在这里
- 一粒尘埃的尘|为何很多新车不再设计“雾灯”,雾灯不重要吗?
- 环球车讯网|宝马MINI 为何在“迷你”的路上越跑越远?
- 汽车一起看|为何说国产高端SUV三强之首是名爵HS,领克和WEY竟无法反驳?
- 汽车知识|沃尔沃XC60为何能直击年轻人的心?看完便知
