cocos2dx界面适配问题 Position AnchorPoint
发布时间:2020-12-14 16:33:12 所属栏目:百科 来源:网络整理
导读:本文主要说说自己对 Position AnchorPoint 的理解 首先上一段主要适配代码 #define EnumContains(value,enum) ((value enum) == enum) enum NodePositionMark{ NodePositionMarkTop = 1 1 ,NodePositionMarkLeft = 1 2 ,NodePositionMarkBottom = 1 3 ,NodeP
本文主要说说自己对 #define EnumContains(value,enum) ((value & enum) == enum)
enum NodePositionMark{
NodePositionMarkTop = 1 << 1,NodePositionMarkLeft = 1 << 2,NodePositionMarkBottom = 1 << 3,NodePositionMarkRight = 1 << 4,NodePositionMarkVerticalityCenter = 1 << 5,NodePositionMarkHorizontalCenter = 1 << 6,};
void setPosition(Node *node,NodePositionMark nodePositionMark)
{
Vec2 visibleOrigin = Director::getInstance()->getVisibleOrigin();
Size visibleSize = Director::getInstance()->getVisibleSize();
Size dSize = Director::getInstance()->getOpenGLView()->getDesignResolutionSize();
Vec2 anchorPoint = node->getAnchorPoint();
Size parentContentSize = Director::getInstance()->getVisibleSize();
if (node->getParent()) {
parentContentSize = node->getParent()->getContentSize();
visibleOrigin = Vec2::ZERO;
}
bool isNeedCareInVisibleSize = false;
if (parentContentSize.equals(dSize) && visibleOrigin != Vec2::ZERO) {
isNeedCareInVisibleSize = true;
parentContentSize = visibleSize;
visibleOrigin = Director::getInstance()->getVisibleSize();
}
Size contentSize = node->getContentSize();
float x = .0,y = .0;
if ( EnumContains(nodePositionMark,NodePositionMarkTop) ) {
y = parentContentSize.height + contentSize.height * (anchorPoint.y - 1) ;
}
if ( EnumContains(nodePositionMark,NodePositionMarkBottom)) {
y = contentSize.height * anchorPoint.y;
}
if ( EnumContains(nodePositionMark,NodePositionMarkVerticalityCenter) ) {
y = (parentContentSize.height - contentSize.height) * 0.5 + contentSize.height * anchorPoint.y ;
}
if ( EnumContains(nodePositionMark,NodePositionMarkLeft)) {
x = contentSize.width * anchorPoint.x;
}
if ( EnumContains(nodePositionMark,NodePositionMarkRight)) {
x = parentContentSize.width - contentSize.width * (1-anchorPoint.x);
}
if ( EnumContains(nodePositionMark,NodePositionMarkHorizontalCenter) ) {
x = (parentContentSize.width - contentSize.width) * 0.5 + contentSize.width * anchorPoint.x;
}
node->setPosition(visibleOrigin+Vec2(x,y));
}
这里需要注意AnchorPoint 的x,y取值是(.0~1.0) 上面的代码缺少 margin 模块 比如MarginTop 、 MarginLeft 等
9.15添加 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |