zoukankan      html  css  js  c++  java
  • cocos2dx tag和zorder

    当一个渲染对象加入到两外一个渲染对象中时,可以有两个可选参数,一个时tag,一个是order


        virtual void addChild(CCNode * child);

        virtual void addChild(CCNode * child, int zOrder);

        virtual void addChild(CCNode* child, int zOrder, int tag);


    当使用addChild,不带zOrder和tag时,那么使用子对象保存的zorder和tag,而这两个值在对象创建时,

    zOrder是0,tag是-1


    tag用于标记这个渲染对象,就像每个人都有身份证一样。

    如果我们在某个函数中把对象加入到父节点,而在另外一个函数中又要用到这个节点,我们必须在这两个函数外定义该节点,这样代码显得很难看。代码如下:


    void MyScene::init()

    {

    CCSprite* sp = CCSprite::create();

    addChild(sp);

    }


    void MyScene::handle()

    {

    // 怎么得到sp指针呢,它再另外一个函数中创建的

            // c++中至少有两种办法,第一成员变量,定义全局变量,但是这种变量很多,写起来很辛苦,并且代码会很难看

    }

    ///////////////////////////改进后如下:////////////////

    void MyScene::init()

    {

    CCSprite* sp = CCSprite::create();

    addChild(sp, 0, 30);

    }


    void MyScene::handle()

    {

    CCSprite* sp = (CCSprite*)getChildByTag(30);

    // 对sp做别的处理。。。。

    }


    ///////////////////嗯,人的身份证是不能重复的,但是tag不小心重复了怎么办?

    cocos2dx不负责管理tag的唯一性,你得自己小心,如果一旦重复了,会导致你获取child得时候,可能不正确。


    ////////tag和身份证不一样得是,tag是能修改的

    sp->setTag(...)可以修改,所以就算tag重复了,也可以修改的


    -----------------------------下面说zOrder

    ZOrder是子对象的Z轴方向的值,负责管理对象的覆盖关系。

    ZOrder越大,那么越靠近用户。

    如果ZOrder相同,那就看加入顺序,越后面加入的对象,越靠近用户。




  • 相关阅读:
    comm---两个文件之间的比较
    fgrep---指定的输入文件中的匹配模式的行
    zip---解压缩文件
    unzip---解压缩“.zip”压缩包。
    tar---打包,解压缩linux的文件和目录
    scp---远程拷贝文件
    make---GNU编译工具
    gcc---C/C++ 编译器
    expr---计算工具
    curl -w 支持的参数
  • 原文地址:https://www.cnblogs.com/new0801/p/6177175.html
Copyright © 2011-2022 走看看