爲何屏幕適配,暫且不說,先看下目前手機的屏幕分辨率,以下: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