cocos2dx屏幕適配

cocos2dx3.2 ——屏幕適配
html

本文出自 「夏天的風」 博客,請務必保留此出處 http://shahdza.blog.51cto.com/2410787/1550089  android

手機的屏幕大小千差萬別,如如今流行的安卓手機屏幕大部分長寬比例爲16:9。而iPhone 5S的長寬比例爲71:40(接近16:9),也有預測說iPhone 6S的長寬比例也將會是主流的16:9。另外還有一些平板電腦爲4:三、16:十、5:4等等。固然還有一些其餘的牌子可能屏幕比例也不同。app

    要想讓你的程序在各類手機上都能很好的呈現遊戲畫面,就須要進行屏幕適配函數

【致謝】spa

    http://gl.paea.cn/contents/10adab2de4f4bf1c.html.net

【小知識】設計

    分辨率:是指屏幕圖像的精密度,即顯示器所能顯示的像素有多少。code

            如:分辨率480×320的意思是水平方向含有像素數爲480個,垂直方向像素數320個。orm

            屏幕尺寸同樣的狀況下,分辨率越高,顯示效果就越精細和細膩。xml

            同時分辨率也反映了屏幕長寬比例(如15:10)。


【屏幕適配】


一、兩個分辨率

    1.一、窗口分辨率

    在AppDelegate.cpp中有個設置窗口分辨率的函數。該函數是設置了咱們預想設備的屏幕大小,也就是應用程序窗口的大小。

[cpp] view plain copy

 在CODE上查看代碼片派生到個人代碼片

  1. //  

  2.     glView->setFrameSize(480, 320);  

  3. //  


1.二、設計分辨率(可視區域)

    在AppDelegate.cpp中也有個設置設計分辨率的函數。該函數是設置了咱們遊戲設計時候的分辨率,也就是可視區域的大小,也就是說設計者初衷的遊戲可視區域的分辨率屏幕大小。

    可是對於每一個用戶來講,他們使用的設備不必定是(480/320)的,好比手機有大有小。

    然後面的ResolutionPolicy::SHOW_ALL,意思是按照原比例(480/320)進行放縮以適配實際屏幕大小。

[cpp] view plain copy

 在CODE上查看代碼片派生到個人代碼片

  1. //  

  2.     glview->setDesignResolutionSize(480, 320, ResolutionPolicy::SHOW_ALL);  

  3. //  


如下貼了三張對比圖,加深理解。

    (1)這是原圖片大小,窗口大小爲480 * 320。

wKiom1QGyKzzrEiyAAEGcXbYaxQ985.jpg


    (2)若設置窗口大小爲setFrameSize(960, 640),而不設置設計分辨率ResolutionPolicy::SHOW_ALL 的狀況下,圖片不放縮,原圖仍是480 * 320。

wKioL1QGyLDDGT0EAAF1kC25cqU991.jpg

    

    (3)設置了 ResolutionPolicy::SHOW_ALL 以後,圖片放縮到適配整個屏幕960 * 640 了。

wKiom1QGyK2hDNN0AAL4YpbsOus524.jpg



二、五種適配模式

    從上面的講解咱們能夠了解到,setFrameSize()是設置了窗口大小(即屏幕的實際大小),而這個參數只是爲了咱們開發時做爲模擬參照,在實際手機上運行時,手機的屏幕大小是咱們沒法設置的。

    而屏幕適配的關鍵在於setDesignResolutionSize(),經過它來設置可視區域的分辨率以及屏幕適配模式。該函數的前兩個參數爲分辨率(即屏幕長寬比例),而最後一個參數則是適配的模式。


    2.一、適配模式

    (1)ResolutionPolicy::EXACT_FIT    :拉伸變形,使鋪滿屏幕。

    (2)ResolutionPolicy::NO_BORDER    :按比例放縮,全屏展現不留黑邊。

                                             (長寬中小的鋪滿屏幕,大的超出屏幕)

    (3)ResolutionPolicy::SHOW_ALL     :按比例放縮,所有展現不裁剪。

                                             (長寬中大的鋪滿屏幕,小的留有黑邊)

    (4)ResolutionPolicy::FIXED_WIDTH  :按比例放縮,寬度鋪滿屏幕。

    (5)ResolutionPolicy::FIXED_HEIGHT :按比例放縮,高度鋪滿屏幕。


    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.三、有圖有真相

        屏幕大小:400 X 400 。

        可視區域大小:480 X 320 。

        根據上面的計算方法,本身慢慢琢磨吧。i_f32.gif

wKioL1QG8-7hZS8WAADziEkMLFg490.jpg        wKiom1QG8-zxDYe8AAEkbDd4bjs111.jpg


wKioL1QG8-_DqPM-AAEZ_8A6D34121.jpg        wKiom1QG8-zBwDRiAAD00smIMss790.jpg


wKioL1QG8-_TuGsLAAD39oAYrEo645.jpg        wKioL1QG8--giZa-AAEgbplGZdw587.jpg

三、橫豎換屏

    cocos2dx開發的遊戲,在手機上運行的時候,默認是橫屏的

3.一、Android

    AndroidManifest.xml文件中

    (1)android:screenOrientation = "landscape"   //橫屏顯示(默認)

    (2)android:screenOrientation = "portrait"    //豎屏顯示

wKioL1QG91fAaz39AACtvtKDipE264.jpg


    3.二、IOS

[cpp] view plain copy

 在CODE上查看代碼片派生到個人代碼片

  1. //  

  2.     - (NSUInteger) supportedInterfaceOrientations{  

  3.         //橫屏顯示  

  4.         //return UIInterfaceOrientationMaskLandscape;  

  5.            

  6.         //豎屏顯示  

  7.         return UIInterfaceOrientationMaskPortrait;  

  8.     }  

  9. //  


四、屏幕大小及座標

    (1)WinSize        屏幕大小

    (2)VisibleSize    :可視區域大小

    (3)VisibleOrigin  :可視區域的左下角座標

[cpp] view plain copy

 在CODE上查看代碼片派生到個人代碼片

  1. //  

  2.     Director::getInstance()->getWinSize()  

  3.     Director::getInstance()->getVisibleSize();  

  4.     Director::getInstance()->getVisibleOrigin();  

  5. //  

圖解:

wKiom1QG-yKzBaDwAACvTwPsE8c748.jpg

相關文章
相關標籤/搜索