1. 程式人生 > >cocos2d-x螢幕適配原理

cocos2d-x螢幕適配原理

一、適配簡介

如今市面上的手機種類越來越多,解析度是千變萬化的。但是我們做遊戲開發,喜歡自己的遊戲可以在各個手機都能合適的執行,那麼就需要做多解析度的適配。

二、retain螢幕概念

之前,蘋果手機對480*320和960*640的手機適配策略是這樣的,當解析度是480*320時,尋找的圖片是1.png。當解析度是960*640時,尋找的圖片是[email protected]。這個圖片是1.png的2倍大小,這樣就能保證在不同的解析度手機上都能很好的執行。但是,這給我們的美工增加了不小的工作量,而且安裝包的大小也會大很多。

cocos2d-x裡也有這種策略,它的做法是把圖片放在不同的資料夾中。程式執行時,根據介面獲取螢幕解析度,然後進行判斷,再設定圖片的搜尋路徑,這樣程式中讀取圖片就會從這個指定的路徑讀取。

if(Director::getInstance()->getWinSize().width > 480){
        std::vector<std::string>s;
        s.push_back("lagre");
    }else{
        std::vector<std::string>s;
        s.push_back("small");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

三、cocos2d-x適配策略

cocos2d-x在2.0.4版本開始提出了自己的適配策略。提出了設計解析度這樣的一個概念。
相關概念:
資源解析度:就是我們的圖片解析度。
設計解析度:我們將這個遊戲放在這個解析度的裝置上,我們的遊戲將完美展示。
裝置解析度:我們手機的解析度。

那麼具體的做法是什麼呢?
這個適配過程可以分為兩個部分。
1.第一個部分,就是資源解析度到設計解析度。但是我們一般在準備資源時,會讓其一致,那麼久可以省略這一步,但是如果不一樣,cocos2d-x也提供了相應的介面。

    Director::getInstance()->setContentScaleFactor(2.0);
  • 1

我們可以設定圖片的縮放銀子,這個設定之後,就相當於將我們的圖片資源縮小了4倍。因為這個的演算法是(資源)/(設計解析度)。
2.第二部分,就是從設計解析度到裝置解析度。我們剛開始說我們將我們這麼的設計的遊戲,放在裝置解析度等於設計解析度的手機上,我們的遊戲將完美展示,但是,當放在手機解析度不等於我們裝置解析度的手機上,那麼它會怎麼顯示呢?
其實,設計解析度的單位是點,而螢幕解析度是畫素。cocos2dx就是為了讓我們的程式,可以不用直接關注手機解析度,而提出了設計解析度這樣的一個概念。在最後繪製的時候,我們設計解析度的一個點,可能對應好幾個畫素。

在程式碼上,我們的螢幕適配就只有下面這點程式碼:

    GLView* gl  = Director::getInstance()->getOpenGLView();
    gl->setDesignResolutionSize(800, 400, ResolutionPolicy::FIXED_HEIGHT);
  • 1
  • 2

這裡的三個引數分別是:設計解析度的寬,設計解析度的高,和適配策略。適配策略是cocos2d-x已經給我們寫好的,現在有5種。

策略1:SHOW_ALL

根據螢幕的寬高與設計解析度的寬高分別計算縮放因子,然後取較小的作為縮放因子。保證了設計區域全部顯示到螢幕上,但是螢幕上可能有黑邊。

策略2:NO_BORDER

根據螢幕的寬高與設計解析度的寬高分別計算縮放因子,然後取較大的作為縮放因子。保證了設計區域在一個方向上鋪滿,而另一個方向一般會超出螢幕區域。

策略3:EXACT_FIT

根據螢幕的寬與設計解析度的寬作為x方向上的縮放因子,根據螢幕的高與設計解析度的高作為y方向上的縮放因子,保證了螢幕完全鋪滿,但是可能會出現影象的拉伸。

策略4:FIXED_HEIGHT

根據螢幕的的寬高比,保證設計解析度的高不變,修改設計解析度的寬。
就是根據螢幕的寬高比,來調整設計解析度的寬高比,使其一直,在此過程中,不對高做調整。
例如:資源解析度800*400->設計解析度800*400->裝置解析度480*320。
首先,我們求出其裝置解析度的寬高比。
480/320 = 1.5。
其次,我們保持設計解析度的高不變,調整寬,使其比例一致。
400*1.5 = 600。
我們的設計解析度為800*400,然而我們計算得出這個策略使用後只需要600*400的解析度,那麼寬多出了200,則圖片在x方向上有部分被截取了,且鋪滿了螢幕。

策略5:FIXED_WIDTH

根據螢幕解析度的寬高比,保證設計解析度的寬不變,修正設計解析度的高。
同樣使用上面那個例子:
首先,求出裝置解析度的寬高比。
480/320 = 1.5。
其次,我們保持設計解析度的寬不變,調整高,使其比例一致。
800/1.5 = 533。
那麼,可知,設計解析度的高是400,比533小。那麼最後圖片在展示時在y方向上會有黑邊。

相關推薦

cocos2d-x螢幕原理

一、適配簡介 如今市面上的手機種類越來越多,解析度是千變萬化的。但是我們做遊戲開發,喜歡自己的遊戲可以在各個手機都能合適的執行,那麼就需要做多解析度的適配。 二、retain螢幕概念 之前,蘋果手機對480*320和960*640的手機適配策略是這樣的,當解析度是480*320時,尋找的圖片是1.png。當

cocos2d-x 螢幕

cocos2dx3.2 ——螢幕適配 手機的螢幕大小千差萬別,如現在流行的安卓手機螢幕大部分長寬比例為16:9。而iPhone 5S的長寬比例為71:40(接近16:9),也有預測說iPhone 6S的長寬比例也將會是主流的16:9。另外還有一些平板電腦為4:3、1

再談cocos2d-x螢幕

一直以來,在 cocos2d-x 平臺中如何用一套資源適配全螢幕都是每個程式的夢想。隨手百度都可以搜尋到很多關於 cocos2dx 適配的文章,但是看完之後的感覺仍然是不知道如何具體操作,所以自己參考網上其他人的帖子,並結合 cocos2dx 原始碼,自己驗證了一番在此做個

cocos2d-x——螢幕

第一,對於螢幕適配問題,首先必須理解幾個基本的概念。 FrameSize:實際上就是裝置的原始解析度,開發環境中可以通過CCEGLView::sharedOpenGLView()->setFrameSize()來設定裝置的解析度大小,當然也可以可以通過CCEGLVi

Cocos2d-x 螢幕解決方案

第一,對於螢幕適配問題,首先必須理解幾個基本的概念。  FrameSize:實際上就是裝置的原始解析度,開發環境中可以通過CCEGLView::sharedOpenGLView()->setFrameSize()來設定裝置的解析度大小,當然也可以可以通過CCEGLVi

Android dp方式的螢幕-原理(後期補充完整講解)

Android dp方式的螢幕適配-原理 傳統所說的螢幕適配,其實是針對不同螢幕的UI尺寸適配,即在編寫頁面時使用了具體的dp、sp值後導致的其他問題。 我之前寫過一些相關的文章和工具外掛,也收到了很多網友的反饋。 今天特編寫此篇部落格,重新整理以前的思路,同時也融入我近期

Android螢幕原理

大綱 1、android中res目錄下的資料夾所對應螢幕尺寸 2、用dp表示尺寸的原理 3、對於720p尺寸的適配需要注意什麼 4、ui切圖按什麼尺寸給最好 參考:http://www.360doc.com/content/12/0301/17/5087210_190881395.shtml 幾個概念: 1

iPhone X 螢幕,沒有鋪滿螢幕的情況

    今天在適配iPhone X的時候,發現iPhone X的螢幕上下沒有鋪滿。新建的專案,以及寫的Demo都是鋪滿螢幕的。        經過反覆檢視專案後,發現原來是很久以前,專案因為啟動頁用的是Launch Image Source,因為用不到Launch Screen File 所以把Lau

cocos2d-x解析度全屏的方法

cocos2d-x 2.0 提供一個極有價值的新特徵: setDesignResolutionSize() 。 這個函式用於指定一個 OpenGL 檢視,然後將這個檢視對映到裝置螢幕上。根據不同的設定,檢視會自動縮放顯示內容,為 cocos2d-x 自適應多種解析度

Cocos2d-JS螢幕(NO-BORDER模式)

         距離上一篇部落格已經有將近一年時間,沒有寫什麼一個是因為一直太忙,另外一個也是不知道要寫什麼,還是做遊戲專案,不過從手遊轉到了Html5遊戲,繼續使用Cocos2d,語言換成了JS。          不多敘舊,這次簡單說下Cocos2d-JS的適配問題,

Cocos2d-x 3.1 一步步做螢幕

本文並不想講關於螢幕適配的概念或者大道理,如果還不瞭解cocos2d-x螢幕適配的,請先看這篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.html。本文有一些內容和圖片是引用這篇文章的。看了那麼多網上關

iOS螢幕 iPhone X 、iPhone XR、iPhone XS 、iPhone XS Max

隨著蘋果爸爸釋出了 超牛叉的iPhone、開發者的適配工作要開始了。 停,?。 如果app 適配過 iPhone X、新機子不用怎麼適配的了。 如果你之前的適配、都是寫死的。 建議你寫活吧。萬一,蘋果爸爸釋出全面屏的iPhone呢? 先看看新手機嘛  新手機和 iPhone X相同、都是劉海屏、 適配劉海

關於iPhone X

發現 win source chang 獲得 name 圖片 屬性 sset 1.屏幕尺寸相關變化 高度增加了145pt,變成812pt. 屏幕圓角顯示,註意至少留10pt邊距。 狀態欄高度由20pt變成44pt,留意這個距離就能避開“劉海”的尷尬,相應的導航欄以上變化6

Android 開發:(九)Android螢幕經驗談

1.名詞解釋 螢幕尺寸: 也就是我們平時所說的某某手機是幾寸屏, 比如HTC one V這款手機是3.7寸的, 這裡的寸說的是英寸(inch),國際上習慣使用的單位,1inch = 2.54cm,3.7寸指的是螢幕的對角線的長度。 螢幕解析度:

Android 螢幕之 dimens

相信做手機端的 App 的小夥伴,只要是產品稍微大一點,就會面臨螢幕適配的問題,對於適配這個問題,網上眾說紛紜,以前雖然有零零散散的看過,但是沒有實踐過,也是在最近遇到這個需求的情況下才研究了一下,現在做個記錄。 1 參考連結 http://blog.csdn.net/qq_341

Cordova 小米8留海螢幕之沉狀態列與 螢幕手機 從開始到結束 總結

 之前專案中打包的apk安裝到全面屏手機後,發現在應用下方出現了一大塊黑色區域(如:小米8),只有在系統中設定適配全面屏才能讓應用在全面屏手機中顯示正常,但是這種方式並不友好,而且有些手機廠商可能也沒有這種設定,所以還是需要我們再打包的時候就做一些相應的處理。 &l

PhaserJS 3 螢幕時的小坑 -- JavaScript Html5 遊戲開發

  PhaserJS 巨坑:在config內不要把 width 設為 window.innnerWidth在config內不要把 width 設為 window.innnerWidth在config內不要把 width 設為 window.i

【iOS】螢幕

螢幕適配 1、螢幕適配的發展過程: 程式碼計算frame -> autoreszing(父控制元件和子控制元件的關係) -> autolayout(任何控制元件都可以產生關係) -> sizeclass   沒有螢幕適配,直接使用frame固定子控制元件的

Anroid螢幕 - 工具篇

這篇文章主要是記錄下自己使用自動化外掛,進行簡單適配。 關於螢幕適配的相關知識可以參考  Android螢幕適配全攻略(最權威的官方適配指導) 1、使用外掛 ScreenMatch    關於ScreenMatch 使用原理,可以參考 &nb

Android中dp px sp概念梳理以及如何做到螢幕

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!