首页 > 代码库 > cocos2dx ui显示机制

cocos2dx ui显示机制

实验1

1,a.addChild(b); a的宽高没变,还是自己的宽高。 层级添加  不会改变原层大小。 

2.node.addChild(sprite);node的宽和高也没变 感觉2dx的显示不是树形结构。

然后改变node的透明度也不管用,node不是个显示类,感觉唯一的作用就是操作很多个sprite。一起改变位置

//sprite包含情况void HelloWorld::testSpriteAdd(){    auto sprite1 = Sprite::create("Images/CyanSquare.png");    sprite1->setPosition(160, 240);        log("sprite1 w,h %f %f",sprite1->getContentSize().width, sprite1->getContentSize().height);    auto node = Node::create();    node->addChild(sprite1);
  node->setOpacity(255 / 2); addChild(node, 0, 100); log("node w,h %f %f", node->getContentSize().width, node->getContentSize().height);//0,0}

 实验2

感觉2dx中没有父改变,所有的子都改变的机制,只是单单改变你调用的那一个对象,下面的代码只有bomb1改变了透明度,他的子spr并没有改变

auto s = Director::getInstance()->getWinSize();    Node* node = Node::create();    Sprite* bomb1 = Sprite::create("bg.png");    node->addChild(bomb1);    this->addChild(node);    node->setOpacity(255 / 2);    node->setPosition(Vec2(s.width/2,s.height/2));    auto spr = Sprite::create("a.png");    bomb1->addChild(spr);    bomb1->setOpacity(255/3);//

 那要整体改变一个node的透明读,然后他所有的子的透明度都变化应该怎么做呢?

void HelloWorld::testSetOpacity(){    auto s = Director::getInstance()->getWinSize();    Node* node = Node::create();    node->setCascadeOpacityEnabled(true);    Sprite* bomb1 = Sprite::create("bg.png");    node->addChild(bomb1);        //auto spr = Sprite::create("a.png");    //bomb1->addChild(spr);    this->addChild(node);    node->setPosition(Vec2(s.width / 2, s.height / 2));    node->setOpacity(255/3);}

setCascadeOpacityEnabled 这个函数里面调用了

updateDisplayedOpacity 这个方法只是遍历了第一层孩子,没有检测孩子的孩子

void Node::updateDisplayedOpacity(GLubyte parentOpacity){	_displayedOpacity = _realOpacity * parentOpacity/255.0;    updateColor();        if (_cascadeOpacityEnabled)    {        for(auto child : _children){            child->updateDisplayedOpacity(_displayedOpacity);        }    }}
 

cocos2dx ui显示机制