zoukankan      html  css  js  c++  java
  • Cocos2d-X中的ZORDER和Tag

    ZORDER:是描写叙述渲染顺序的值,每一个CCNode都有ZORDER,默认是0

    ZORDER越大,越后面绘制

    假设ZORDER同样。那么看arrival顺序。先增加的节点先绘制

    ZORDER仅仅在同样父节点的节点之间进行比較

    先从一段简单的代码看起:

    //在层上设置属性
    bool Zorder::init()
    {
        //初始化父类层
        CCLayer::init();
    
        //得到窗体的尺寸
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
        //创建精灵
        CCSprite* sprite1 = CCSprite::create("CloseNormal.png");
        addChild(sprite1);
    
        //设置精灵的位置
        sprite1->setPosition(ccp(winSize.width/2, winSize.height/2));
    
        CCSprite* sprite2 = CCSprite::create("HelloWorld.png");
        addChild(sprite2);
    
        //设置精灵的位置
        sprite2->setPosition(ccp(winSize.width/2, winSize.height/2));
    
        return true;
    }
    


    上面的代码我是再熟悉只是了,上面的代码实现了。在层中创建了两个精灵。并且两个精灵的位置一样,那么在程序中就会出现这样一个问题。究竟哪个精灵先显示呢?

    为了解决问题,先看一下上面代码的渲染模型


    依据上面的模型可知Layer是CCNode,Sprite1和Sprite2为CCNode的两个子节点,从而可知Sprite1和Sprite2的ZORDER都为0,而后加入的会后绘制。所以后显示后面的精灵

    运行结果:


    改动ZORDER的值:

    方法1、通过改动addChild函数的第二个參数实现改动ZORDER的值

    将上面的代码中的

    //创建精灵
        CCSprite* sprite1 = CCSprite::create("CloseNormal.png");
        addChild(sprite1);

    改成

    //创建精灵
        CCSprite* sprite1 = CCSprite::create("CloseNormal.png");
        addChild(sprite1, 1);


    运行结果:



    方法2、通过使用setZOrder函数设置ZORDER的值

    在代码中加入

     //使用函数设置ZORDER
        sprite1->setZOrder(1);


    运行结果:


    Tag, 是一个节点的身份证。方便通过getChildByTag来获取节对象
      它的意义在于降低成员变量
      Tag仅仅在同样父节点的节点之间有效
      Tag在同样父节点的儿子之间不能同样。Tag同样情况下。cocos不报错,getChildByTag可能会获取到不是你想要的CCNode
      一般用枚举表示Tag以防止反复

      TAG有时候用来当ID使用。尤其是当多个菜单项使用同一个响应函数时候

    
  • 相关阅读:
    前端网络安全——其他安全问题
    前端网络安全——密码安全
    前端网络安全——接入层注入
    前端网络安全——点击劫持
    mac重装系统后安装列表
    manjaro踩坑记录
    JavaScript学习过程中遇到的一些坑
    JavaScript学习
    [解决方法] 如何在没有屏幕的情况下训练一些需要显示的程序
    Python中*号的作用详解
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7259294.html
Copyright © 2011-2022 走看看