cocos2d-x getVisibleSize , getVisibleOrigin 和坐标位置

getWinSize : 获取设备屏幕大小.

getVisibleSize:获得视口(可视区域)的大小,若是DesignResolutionSize跟屏幕尺寸一样大,则getVisibleSize便是getWinSize。

getVisibleOrigin:获得可视区域的出发点坐标,在处理相对位置时,确保节点在不同分辨率下的位置一致。

Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系。该坐标系原点在屏幕左下角,x轴向右,y轴向上。

经简单测试:

1 .以480*320 为例,

在iphone4/iphone4s上,调用getVisibleSize() 获取的大小为(480,320);调用getVisibleOrigin() 获取的大小为(0,0);

在iphone5s(1130*640)上,调用getVisibleSize() 获取的大小为(480,270)(得到了相应的缩放);调用getVisibleOrigin() 获取的大小为(0,24.);

这对于设置控件的位置有些帮助。

扫描二维码关注公众号,回复: 648539 查看本文章

2.控件位置,在cocos2d-x中anchorpoint和position紧密联系, 

    //获取坐标系界面的屏幕可见区域
    Size visibleSize = Director::getInstance()->getWinSize();
    //获取屏幕大小
    Size visibleSize1 = Director::getInstance()->getVisibleSize();//表示获得视口(可视区域)的大小,如果DesignResolutionSize跟屏幕尺寸一样大,则getVisibleSize等于getWinSize。
    //原点位置
    Point origin = Director::getInstance()->getVisibleOrigin();//表示可视区域的起点坐标,这在处理相对位置的时候非常有用,确保节点在不同分辨率下的位置一致
    //创建一个关闭按钮,参数分别为,正常状态显示的图片,选中状态的图片,操作调用的方法即调用MainScene的menuCloseCallback方法
    auto closeItem = MenuItemImage::create("setting.png",
                                           "setting.png",
                                           CC_CALLBACK_1(MainScene::menuCloseCallback, this));
    //设置关闭按钮的位置为视图的右下方
    closeItem->setPosition(origin);//适应不同分辨率,以AnchorPoint(Vec2(0, 0))为例,位置为左下角。
    closeItem->setAnchorPoint(Vec2(0, 0));
    closeItem->setColor(Color3B(250, 100, 0));
    closeItem->setContentSize(Size(43,43));

    auto menu = Menu::create(closeItem, NULL);

    menu->setPosition(Point::ZERO);

    //这里相当于把menu作为父view,而closeItem作为subview ,而subview的closeItem的位置是相对于menu的position的相对位置。以这里为例,由于未设置,menu的默认大小为getWinSize,menu的默认anchorpoint为(0.5,0.5),menu的position由于为(0,0),所以closeItem的位置为(0,0),假设menu的position由于为(240,160),则closeItem的位置为(0 + 240,0 + 160),
    
    //把菜单添加到层中
    this->addChild(menu, 1);
    
    Sprite *visibleS = Sprite::create("setting.png" , Rect(origin,44,44));//这里的origin保证了在不同分辨率的情况下(setAnchorPoint(Vec2(0, 0))),该精灵始终处于左下角。
    visibleS->setAnchorPoint(Vec2(0, 0));
    visibleS->setColor(Color3B(100, 250, 0));
    this->addChild(visibleS);

相关链接:

http://www.tairan.com/archives/3367/

http://blog.csdn.net/lnb333666/article/details/16886623

猜你喜欢

转载自www.cnblogs.com/AndyChen1/p/9030603.html