getChildByTag()は、子供だけだよ。

2014年3月4日

今回は、子供だけの時間です。
うそです。
cocos2d-xの多くのコントロールは、CCNodeを継承しているわけですが、こいつは、getChildByTag()という
関数を持っています。この関数、自分の配下に追加されているタグ付けしたNodeを探すのに便利ですが、
ここから取れるのは子供だけで、孫や曾孫は探してくれません。
ということで子孫、探すやつ作ってみました。
ああ、最底辺のコードなので期待しないように。そして、この関数を使ったことにより、
プロジェクトが破綻して会社クビになり、家族に見捨てられたとしても責任は持てません。
各種損害については、一切責任を持ちません。

cocos2d::CCNode* getChildbyTagRecursively(cocos2d::CCNode* target, int tag)
{
    CCAssert(target != NULL, "Invalid target");
    CCNode *node = target->getChildByTag(tag);
    if (node == NULL) {
        CCArray* children = target->getChildren();
        int cnt = 0;
        if (children != NULL) {
            for (cnt = 0; cnt < children->count(); ++cnt) {
                target = dynamic_cast(children->objectAtIndex(cnt));
                node = ::getChildrenRecursively(target, tag);
                if (node != NULL) {
                    break;
                }
            }
        }
    }
    return node;
}

てか、関数名にChild付いているの変かもね。
最底辺は関数名を付けるのも苦手です。

cocos2d-x

Posted by koheizi