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相同,那就看加入顺序,越后面加入的对象,越靠近用户。




  • 相关阅读:
    docker 基本概念
    6_State 游戏开发中使用状态机
    5_Singleton 游戏开发中的单例模式
    4_Prototype 原型
    3_observer
    2_flyweight, 轻量化模式
    1_Command 游戏开发命令模式
    CentOS7 Failed to start LSB: Bring up/down解决方法
    CentOS 7 中firewall-cmd命令
    CentOS查询端口占用和清除端口占用的程序
  • 原文地址:https://www.cnblogs.com/new0801/p/6177175.html
Copyright © 2011-2022 走看看