• 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);
            }
        }
    }
     
  • 相关阅读:
    Atitit  Uncaught (in promise) SyntaxError Unexpected token < in JSON at position 0
    Atitit  验证 数字验证 非空验证的最佳算法  h5
    Atitit 转移特效attilax总结
    Atitit Loading 动画效果
    Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型
    Atitit hibernate3 hinernate4 hibernate5新特性attilax总结
    Atitit js es5 es6新特性 attilax总结
    Atitit mybatis 3 3.2 3.3  3.4 新特性attilax总结
    Atitit spring 3.0 3.1 3.2 4.0 4.3 5.0 新特性
    Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性
  • 原文地址:https://www.cnblogs.com/as3lib/p/3945643.html
Copyright © 2020-2023  润新知