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);
        }
    }
}
 

posted on 2014-08-29 19:19  防空洞123  阅读(343)  评论(0编辑  收藏  举报

导航