如何获取某个在层容器中的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了。