【嘮叨】
成都創新互聯公司是一家企業級云計算解決方案提供商,超15年IDC數據中心運營經驗。主營GPU顯卡服務器,站群服務器,德陽電信服務器托管,海外高防服務器,機柜大帶寬、租用·托管,動態撥號VPS,海外云手機,海外云服務器,海外服務器租用托管等。手機的屏幕大小千差萬別,如現在流行的安卓手機屏幕大部分長寬比例為16:9。而iPhone 5S的長寬比例為71:40(接近16:9),也有預測說iPhone 6S的長寬比例也將會是主流的16:9。另外還有一些平板電腦為4:3、16:10、5:4等等。當然還有一些其他的牌子可能屏幕比例也不一樣。
要想讓你的程序在各種手機上都能很好的呈現游戲畫面,就需要進行屏幕適配。
【致謝】
http://gl.paea.cn/contents/10adab2de4f4bf1c.html
【小知識】
分辨率:是指屏幕圖像的精密度,即顯示器所能顯示的像素有多少。
如:分辨率480×320的意思是水平方向含有像素數為480個,垂直方向像素數320個。
屏幕尺寸一樣的情況下,分辨率越高,顯示效果就越精細和細膩。
同時分辨率也反映了屏幕長寬比例(如15:10)。
【屏幕適配】
1、兩個分辨率
1.1、窗口分辨率
在AppDelegate.cpp中有個設置窗口分辨率的函數。該函數是設置了我們預想設備的屏幕大小,也就是應用程序窗口的大小。
// glView->setFrameSize(480, 320); //
1.2、設計分辨率(可視區域)
在AppDelegate.cpp中也有個設置設計分辨率的函數。該函數是設置了我們游戲設計時候的分辨率,也就是可視區域的大小,也就是說設計者初衷的游戲可視區域的分辨率屏幕大小。
但是對于每個用戶來說,他們使用的設備不一定是(480/320)的,比如手機有大有小。
而后面的ResolutionPolicy::SHOW_ALL,意思是按照原比例(480/320)進行放縮以適配實際屏幕大小。
// glview->setDesignResolutionSize(480, 320, ResolutionPolicy::SHOW_ALL); //
以下貼了三張對比圖,加深理解。
(1)這是原圖片大小,窗口大小為480 * 320。
(2)若設置窗口大小為setFrameSize(960, 640),而不設置設計分辨率ResolutionPolicy::SHOW_ALL 的情況下,圖片不放縮,原圖還是480 * 320。
(3)設置了 ResolutionPolicy::SHOW_ALL 之后,圖片放縮到適配整個屏幕960 * 640 了。
2、五種適配模式
從上面的講解我們可以了解到,setFrameSize()是設置了窗口大小(即屏幕的實際大小),而這個參數只是為了我們開發時作為模擬參照,在實際手機上運行時,手機的屏幕大小是我們無法設置的。
而屏幕適配的關鍵在于setDesignResolutionSize(),通過它來設置可視區域的分辨率以及屏幕適配模式。該函數的前兩個參數為分辨率(即屏幕長寬比例),而最后一個參數則是適配的模式。
2.1、適配模式
(1)ResolutionPolicy::EXACT_FIT:拉伸變形,使鋪滿屏幕。
(2)ResolutionPolicy::NO_BORDER:按比例放縮,全屏展示不留黑邊。
(長寬中小的鋪滿屏幕,大的超出屏幕)
(3)ResolutionPolicy::SHOW_ALL:按比例放縮,全部展示不裁剪。
(長寬中大的鋪滿屏幕,小的留有黑邊)
(4)ResolutionPolicy::FIXED_WIDTH:按比例放縮,寬度鋪滿屏幕。
(5)ResolutionPolicy::FIXED_HEIGHT:按比例放縮,高度鋪滿屏幕。
2.2、計算方法
假設:屏幕分辨率(fWidth,fHeight) ; 設計分辨率(dWidth,dHeight)。
放縮因子:k1 = fWidth/dWidth ; k2 = fHeight/dHeight。
則適配后的分辨率大小如下:
(1)EXACT_FIT:( dWidth * k1 , dHeight * k2 )
(2)NO_BORDER:( dWidth * max(k1,k2) , dHeight * max(k1,k2) )
(3)SHOW_ALL:( dWidth * min(k1,k2) , dHeight * min(k1,k2) )
(4)FIXED_WIDTH:( dWidth * k1 , dHeight * k1 )
(5)FIXED_HEIGHT:( dWidth * k2 , dHeight * k2 )
2.3、有圖有真相
屏幕大小:400 X 400 。
可視區域大小:480 X 320 。
根據上面的計算方法,自己慢慢琢磨吧。
3、橫豎換屏
cocos2dx開發的游戲,在手機上運行的時候,默認是橫屏的。
3.1、Android
AndroidManifest.xml文件中
(1)android:screenOrientation = "landscape" //橫屏顯示(默認)
(2)android:screenOrientation = "portrait" //豎屏顯示
3.2、IOS
// - (NSUInteger) supportedInterfaceOrientations{ //橫屏顯示 //return UIInterfaceOrientationMaskLandscape; //豎屏顯示 return UIInterfaceOrientationMaskPortrait; } //
4、屏幕大小及坐標
(1)WinSize:屏幕大小
(2)VisibleSize:可視區域大小
(3)VisibleOrigin:可視區域的左下角坐標
// Director::getInstance()->getWinSize() Director::getInstance()->getVisibleSize(); Director::getInstance()->getVisibleOrigin(); //
圖解:
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享標題:cocos2dx[3.2](6)——屏幕適配-創新互聯
網站URL:http://vcdvsql.cn/article8/gihip.html
成都網站建設公司_創新互聯,為您提供電子商務、企業建站、企業網站制作、App設計、小程序開發、ChatGPT
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯