如何获取某个在层容器中的ui控件在屏幕上的绝对坐标?

如何获取某个在层容器中的ui控件在屏幕上的绝对坐标?有没有现成的接口啊某个ui控件如果处于层容器中,getPosition是返回在这个层容器中的相对坐标;如果想获取相对于屏幕左下角的绝对坐标呢?

— Begin quote from ____

%url%小雨 发表于 2013-8-31 16:08
擦,今天突然发现UIWidget里有个getLocationInWindow()

前几天怎么就没看到呢…………

— End quote

多谢!
通过convertToWorldSpace接口也可以实现,例如:
CCPoint vPos = pBtn->getContainerNode()->convertToWorldSpace(CCPointZero);

— Begin quote from ____

%url%小雨 发表于 2013-8-31 16:08
擦,今天突然发现UIWidget里有个getLocationInWindow()

前几天怎么就没看到呢…………

— End quote

楼上铁血女程序啊

擦,今天突然发现UIWidget里有个getLocationInWindow()

前几天怎么就没看到呢…………

— Begin quote from ____

%url%chengstory 发表于 2013-8-29 16:49
楼上威武啊

— End quote

受宠若惊……

楼上威武啊

  • 本帖最后由 小雨 于 2013-8-29 16:08 编辑 *

看了UIWidget 和 CCNode CCObject的源码,好像都没找到,或许我眼睛不大好=。=

不嫌弃的话把下面这两个函数放到你的UIWidget里面。试用了一下好像可以,没把握=。=……

CCPoint UIWidget::getAbsolutePosition(){
        CCPoint ret = getPosition();
        CCNode* cobj;
        UIWidget* uobj = this;
        UIWidget* tuobj;
        bool lastIsUI = true;
        
        while(true){
                if(lastIsUI){
                        tuobj = dynamic_cast<UIWidget*>(uobj->getWidgetParent());
                        if(tuobj != NULL){
                                uobj = tuobj;
                                ret.x += uobj->getPosition().x;
                                ret.y += uobj->getPosition().y;
                                lastIsUI = true;
                        }else{
                                cobj = dynamic_cast<CCNode*>(uobj->getUILayer());
                                if(cobj == NULL)break;
                                ret.x += cobj->getPosition().x;
                                ret.y += cobj->getPosition().y;
                                lastIsUI = false;
                        }
                }else{
                        cobj = dynamic_cast<CCNode*>(cobj->getParent());
                        if(cobj == NULL)break;
                        ret.x += cobj->getPosition().x;
                        ret.y += cobj->getPosition().y;
                }
                
        } 
        return ret;
}
UILayer* UIWidget::getUILayer(){
        return m_pUILayer;
}

然后通过getAbsolutePosition就可以获得一个表示坐标的ccpoint了。