[cocos2d-x]關於屏幕適配

第一步:理解屏幕分辨率和設計分辨率

這裏寫圖片描述

經過這個圖能夠很容易理解,設計分辨率就是你可以進行紋理繪製的大小,而屏幕分辨率就是你的畫框大小。而二者之間的適配,經過cocos2dx自帶的幾種適配方案來進行適配,這裏我就簡單說明一下:web

1—-ResolutionPolicy::EXACT_FIT :拉伸變形,使鋪滿屏幕
2—-ResolutionPolicy::NO_BORDER :按比例放縮,全屏展現不留黑邊
3—-ResolutionPolicy::SHOW_ALL :按比例放縮,所有展現不裁剪
4—-ResolutionPolicy::FIXED_WIDTH :按比例放縮,寬度鋪滿屏幕
5—-ResolutionPolicy::FIXED_HEIGHT :按比例放縮,高度鋪滿屏幕svg

關於一些屬性:origin,visiblesize,winsize

首先要知道,咱們設計時要關注的就是屏幕設計分辨率。而後再將屏幕設計分辨率對屏幕分辨率進行適配。ui

origin:即在屏幕中,framesize的原點在designSize的位置,全部的Layer,sprite都是以這個座標爲原點,visiblesize即designsize在framesize的比例下能夠看見的區域大小。spa

glview->setFrameSize(400, 320);
glview->setDesignResolutionSize(800,320, ResolutionPolicy::NO_BORDER);

//最後的輸出
//winsize :800.000000,320.000000
//origin 200.000000,0.000000
//visiblesize 400.000000,320.000000

如圖所示:
這裏寫圖片描述
這裏寫圖片描述設計

(圖中origin爲200,打錯了)
接下來貼出源碼:code

Vec2 GLView::getVisibleOrigin() const
{
    if (_resolutionPolicy == ResolutionPolicy::NO_BORDER)
    {
        return Vec2((_designResolutionSize.width - _screenSize.width/_scaleX)/2, 
                           (_designResolutionSize.height - _screenSize.height/_scaleY)/2);
    }
    else 
    {
        return Vec2::ZERO;
    }
}//這是origin的獲取方法,爲(設計分辨率-屏幕分辨率/放縮比率)/2
//上圖就是 (800-400/1)/2=200


Size GLView::getVisibleSize() const
{
    if (_resolutionPolicy == ResolutionPolicy::NO_BORDER)
    {
        return Size(_screenSize.width/_scaleX, _screenSize.height/_scaleY);
    }
    else 
    {
        return _designResolutionSize;
    }
}//這是visiblesize,等於屏幕大小/放縮比例
相關文章
相關標籤/搜索