cocos2d x螢幕適配原理

2021-07-31 15:35:28 字數 2058 閱讀 1238

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

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

if(director::getinstance()->getwinsize().width > 480)else
cocos2d-x在2.0.4版本開始提出了自己的適配策略。提出了設計解析度這樣的乙個概念。

相關概念:

資源解析度:就是我們的解析度。

設計解析度:我們將這個遊戲放在這個解析度的裝置上,我們的遊戲將完美展示。

裝置解析度:我們手機的解析度。

那麼具體的做法是什麼呢?

這個適配過程可以分為兩個部分。

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

director::getinstance()->setcontentscalefactor(2.0);
我們可以設定的縮放銀子,這個設定之後,就相當於將我們的資源縮小了4倍。因為這個的演算法是(資源)/(設計解析度)。

2.第二部分,就是從設計解析度到裝置解析度。我們剛開始說我們將我們這麼的設計的遊戲,放在裝置解析度等於設計解析度的手機上,我們的遊戲將完美展示,但是,當放在手機解析度不等於我們裝置解析度的手機上,那麼它會怎麼顯示呢?

其實,設計解析度的單位是點,而螢幕解析度是畫素。cocos2dx就是為了讓我們的程式,可以不用直接關注手機解析度,而提出了設計解析度這樣的乙個概念。在最後繪製的時候,我們設計解析度的乙個點,可能對應好幾個畫素。

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

glview* gl  = director::getinstance()->getopenglview();

gl->setdesignresolutionsize(800, 400, resolutionpolicy::fixed_height);

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

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

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

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

根據螢幕的的寬高比,保證設計解析度的高不變,修改設計解析度的寬。

就是根據螢幕的寬高比,來調整設計解析度的寬高比,使其一直,在此過程中,不對高做調整。

例如:資源解析度800*400->設計解析度800*400->裝置解析度480*320。

首先,我們求出其裝置解析度的寬高比。

480/320 = 1.5。

其次,我們保持設計解析度的高不變,調整寬,使其比例一致。

400*1.5 = 600。

我們的設計解析度為800*400,然而我們計算得出這個策略使用後只需要600*400的解析度,那麼寬多出了200,則在x方向上有部分被擷取了,且鋪滿了螢幕。

根據螢幕解析度的寬高比,保證設計解析度的寬不變,修正設計解析度的高。

同樣使用上面那個例子:

首先,求出裝置解析度的寬高比。

480/320 = 1.5。

其次,我們保持設計解析度的寬不變,調整高,使其比例一致。

800/1.5 = 533。

那麼,可知,設計解析度的高是400,比533小。那麼最後在展示時在y方向上會有黑邊。

cocos2d x螢幕適配原理分析

開發移動應用的螢幕適配和愛情一樣是乙個從洪荒時代就存在的永恆命題,根本目的是實現在不同裝置上使用者體驗的統一。cocos2d x在cocos2d 2.0 x 2.0.4版本之前沒有提供解決的方案,開發者只能自己解決,其中一些方法見 這裡從2.0 x 2.0.4開始,勤勞的cocos2d x團隊終於著...

Cocos2d x螢幕適配原理分析

setposition 的變化 之前版本可能已經習慣了ccnode setposition const ccpoint position 和ccnode setpositioninpixel const ccpoint position 但在新的版本裡,只有setposition const ccp...

cocos2d x螢幕適配原理分析

開發移動應用的螢幕適配和愛情一樣是乙個從洪荒時代就存在的永恆命題,根本目的是實現在不同裝置上使用者體驗的統一。cocos2d x在cocos2d 2.0 x 2.0.4版本之前沒有提供解決的方案,開發者只能自己解決,其中一些方法見 這裡從2.0 x 2.0.4開始,勤勞的cocos2d x團隊終於著...