cocos2d-x 2.2.6 屏幕自適配

爲何屏幕適配,暫且不說,先看下目前手機的屏幕分辨率,以下:windows

480*800     // 好比windows phone以及中高端Android機app

480*854     //  WFVGA,是480*800的加長版iphone

540*960     // HTCspa

640*960         // 經典版的iphone.net

1136*960           // iphone5code

1280*720           // 傳說中的HDblog

1280*800    // 三星的9220遊戲

1024*768    // ipad圖片

若是我想讓個人遊戲在這些設備上運行,由於屏幕的不一致而設定多張不一樣的資源圖片顯示是不可取的,因此,屏幕適配是一個很好的方式。ip

在模擬器中,通常設定屏幕的大小,咱們會使用main.cpp中:

CCEGLView* eglView = CCEGLView::sharedOpenGLView();
// 設定屏幕大小
eglView->setFrameSize(960, 640);     

 

然而,在程序中,假如,我有張480*320的圖片,屏幕大小設定爲960*640,其效果以下:

這樣的效果,是不能知足要求的,因此在cocos2d-x的AppDelegate的AppDelegate::applicationDidFinishLaunching()中,咱們能夠添加以下代碼:

CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

pEGLView->setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);

針對於setDesignResolutionSize,其,第一個和第二個參數爲分辨率的寬高,第三個參數是適配模式,主要有如下幾種:

kResolutionExactFit,        // 拉伸變形,使其鋪滿屏幕
kResolutionNoBorder,      // 按比例放縮,全屏展現不留黑邊(長寬中小的鋪滿屏幕,大的超出屏幕)
kResolutionShowAll,        // 按比例放縮,所有展現不裁剪(長寬中大的鋪滿屏幕,小的留有黑邊)
kResolutionFixedHeight,   // 按比例放縮,寬度鋪滿屏幕
kResolutionFixedWidth,    // 按比例放縮,高度鋪滿屏幕

通常狀況下,獲取分辨率的寬高,咱們會使用

CCDirector::sharedDirector()->getWinSize()獲取分辨率的寬高

屏幕適配的原理,說通俗點講就是獲取屏幕寬高比率和背景圖片寬高比率相對比的,因此我採起的方式是這樣的:

// 屏幕適配(原理:根據屏幕比率和背景圖片比率比較的大小)

ResolutionPolicy eResolutionType = kResolutionUnKnown;   // 適配模式
    CCSize winSize = CCSizeMake(480, 320);
    float designRate = winSize.width / winSize.height;               // 參照比率

    float WinWidth = CCDirector::sharedDirector()->getWinSize().width;

    float WinHeight = CCDirector::sharedDirector()->getWinSize().height;
    float WinRate = WinWidth / WinHeight;                // 屏幕比率

    if (WinRate > designRate)
        eResolutionType = kResolutionFixedWidth;
    else if(WinRate < designRate)
        eResolutionType = kResolutionFixedHeight;
    else if(WinRate == designRate)
        eResolutionType = kResolutionNoBorder;
    pEGLView->setDesignResolutionSize(winSize.width, winSize.height, eResolutionType);

 

最後運行效果:

 

參考:http://blog.csdn.net/chinahaerbin/article/details/39586281

參考:http://my.oschina.net/ffs/blog/305680?fromerr=vvswf7WK

相關文章
相關標籤/搜索