`

addChild&&rawChildren的addChild

    博客分类:
  • Flex
阅读更多

转自:http://hi.baidu.com/ls_mcx/blog/item/ccb4720bbc68c332b1351d90.html

 

 

如果你想将一个sprite放入一个的容器内,那么 你会调用容器的 addChild方法。但是 运行 就会报错误,不是Uicomponent的子类。但是 查API 你会发现 addChild的参数 的类型 是定为DisplayObject的。没错啊 编译也通过的啊 。
今天才发现 调用rawChildren的addChild就可以不报错的添加成功。
那么 这两个方法究竟有什么区别?使用的时机各是什么?这么做的意义又是什么呢?
mx.core.Container是“组件(UIComponent)容器”,用来管理其中子组件(UIComponent)的布局。通过Container的numChildren属性和getChildAt()方法就可以遍历其所包含的子组件,也可以通过getChildren()方法一次性获得所有子组件的数组。通过addChild()、addChildAt()、removeChild()、removeChildAt()、removeAllChildren()等方法来维护容器所包含的子组件。我们最常用的Application就是组件容器,组件同组件容器的关系非常密切,Flex中的组件无法脱离容器而独立显示,Flex组件必须放在某个容器中才能工作。因此,Flex组件的生命周期和布局都与组件容器息息相关,这一点在2.5.2节中会有详细阐述。
    mx.core.Container是组件(UIComponent)容器的同时也是一个“显示对象容器(DisplayObjectContainer)”。值得注意的是:作为组件(UIComponent)容器,Container覆盖了继承自DisplayObjectContainer的addChild()、addChildAt()、removeChild()、removeChildAt()等方法,这些方法在Container类中只是用来维护组件容器所包含的子组件,这不同于维护子显示对象。同时,Container的numChildren属性也只是用来表示容器中所有子组件的数量而不是所有子显示对象的数量。
    Container自身也是一个组件,它也有自己的内部对象,比如边框、背景、滚动条、标题、注脚等,这些内部对象被称为组件容器的“边饰”。从显示对象容器角度来看,Container的内部对象以及子组件都是显示对象容器的子显示对象。因此,容器的所有子显示对象应包括其内部对象以及所有的子组件(child UIComonent),通过Container的rawChildren属性可以获得访问容器所有子显示对象的接口。代码清单2-18列出了Application对象的所有子显示对象,并标记了每个子显示对象是子组件还是内部对象

rawChildren是容器特有的,看看API就可以大概理解rawChildren的作用了。

分享到:
评论

相关推荐

    Flex addChild()方法注意事项

    由于Application的addChild()方法要求必须添加实现了IUIComponent接口的对象,直接使用addChild()添加Sprite或MovieClip这样的display object类是不被允许的。这是因为这些类虽然继承自DisplayObject,但并没有实现...

    js 实现 tree结构

    要使用JavaScript实现树结构,我们可以定义一个`Node`类,包含`value`(节点值)、`children`(子节点数组)等属性,并提供`addChild`、`removeChild`、`findNode`等方法来操作树。 ```javascript class Node { ...

    flash actionscript3游戏开发教程之this和stage的区别.zip_actionscript入门

    压缩包中的"addChild即this.addChild是在此类上添加子级显示对象.txt"文件强调了这一点。`this.addChild()`是在当前类实例的显示列表上添加子项,这会影响该实例的层次结构。 另一方面,`stage`是AS3中的顶级容器,...

    as3场景中MC复制一个或多个

    说明:这个是用来实现已在场景中的Mc复制多个出来,如AS2中可以duplicateMovieClip,AS3中用是用New和addChild的, 有人会说As3可以用  方法1——反射方法: var ClassRef:Class = getDefinitionByName...

    jpct-ae 绘制的桌子(Android 3D)

    《使用JPCT-AE在Android平台上构建3D桌子》 JPCT-AE,全称Java 3D Pseudo-Engine Advanced Edition,是一个轻量级、高效且功能强大的3D游戏引擎,尤其适用于Android平台。这个引擎允许开发者用相对简单的代码实现...

    c++实现的异质树

    由于树的节点可能有不同的类型,所以`addChild`函数可能需要接受一个泛型参数,如`std::shared_ptr<Node> child`,利用智能指针管理内存。 ```cpp class Node { public: virtual void addChild(std::shared_ptr...

    cocos2d-x的粒子创建

    this->addChild(back,0); //加载大炮的炮台效果和图标效果,如果这里的代码与上面的代码前后顺序更改,则会出现炮台效果在水波下面显示。不是没有显示,只是遮挡关系的原因。而看不见 texture=CCTextureCache::...

    PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】

    在示例中,我们首先创建一个SimpleXMLElement对象,然后使用`addChild`方法添加元素,并可以同时设置元素内容。`addAttribute`方法用于添加属性。 ```php $mysql = new SimpleXMLElement('...

    【prototype学习】基于prototype的tree(纯数据驱动OO)

    3. 方法:如`addChild`用于添加子节点,`removeChild`用于移除子节点,`traverse`用于遍历树结构等。 在实现过程中,我们可以通过`this`关键字来引用当前对象,通过`new`关键字创建新的对象实例。例如: ```...

    cocos2d象棋游戏

    addChild(_s[i]); //设置棋子的初始位置为随机位置 _s[i]->setPosition(ccp(CCRANDOM_0_1() * winSize.width, CCRANDOM_0_1() * winSize.height)); //隐藏棋子 _s[i]->setVisible(false); } //创建一个选择框 ...

    关于异质树的C++实现

    virtual void addChild(Node* child) = 0; // 添加子节点 // 其他可能的虚函数,如removeChild, traverse等 }; ``` 接着,我们可以为每种不同类型的节点创建派生类,并实现这些虚函数。比如,如果我们有“整数...

    as3.0对话框

    dialogBox.addChild(background); // 添加文本字段 var messageText:TextField = new TextField(); messageText.text = "这是一个对话框示例"; dialogBox.addChild(messageText); // 添加确定按钮 var okButton:...

    aether.swc

    sprite.addChild( background ); sprite.addChild( textField ); return sprite; } // Create the display object for the button's up state private function createOverState():Sprite { var sprite:...

    编译原理语法分析器C++

    if (op.type == '+') exprTree->addChild(new BinaryOpNode("+")); else exprTree->addChild(new BinaryOpNode("-")); } } Term() { Factor(); while (match('*', '/')) { Token op = consume(); Factor(); if (op...

    直接写xml文件

    3. **创建XML结构**:通过调用`AddChild`方法创建元素,`SetText`设置元素文本,`SetAttribute`设置属性。例如,创建上面的`book`元素: ```pascal var BookElm, TitleElm, AuthorElm, YearElm: IXMLNode; begin...

    在cocos3D的一个页面中显示两个场景的xcode代码

    [scene1 addChild:model1]; [scene2 addChild:model2]; ``` 4. **添加光照和相机**:为了使3D模型可见,需要添加光源和相机。Cocos3D提供了`CC3Light`和`CC3Camera`类: ```objc CC3Light *light = [CC3Light...

    PHP中的生成XML文件的4种方法分享

    $item->addChild('title', $data['title'])->addAttribute('size', $data['title_size']); $item->addChild('content', $data['content']); $item->addChild('pubdate', $data['pubdate']); } ``` 将 `...

    吹泡泡源码

    this.addChild(pao); addPaopao();//调用一个泡泡 this.addChildAt(fengcheMC,this.numChildren); this.addEventListener(MouseEvent.MOUSE_MOVE,onMove); Mouse.hide();//隐藏鼠标 this....

    程序的组织和构建.docx

    objRoot.addChild(directionalLight); // 添加灯光 objTrans.addChild(cone); // 添加锥形物体 objRoot.addChild(objTrans); objRoot.compile(); // 编译场景图 return objRoot; } ``` 2. 场景基准部分: 场景...

Global site tag (gtag.js) - Google Analytics