Cocos2d x 螢幕適配

2021-12-29 21:06:07 字數 2279 閱讀 1657

為了適應移動終端的各種解析度大小,各種螢幕寬高比,在 cocos2d-x(當前穩定版:2.0.4) 中,提供了相應的解決方案,以方便我們在設計遊戲時,能夠更好的適應不同的環境。

而在設計遊戲之初,決定著我們螢幕適配的因素有哪些,簡而言之只有兩點:螢幕大小 和 寬高比。這兩個因素是如何影響遊戲的:

螢幕大小: 從小解析度 480x320 到 1280x800 解析度,再到全高畫質 1080p,從手機到平板,還有蘋果裝置的 retina 屏,這麼多不同的解析度,而且大小差距甚大,不可能做到一套資源走天下,資源往小了設計,在大螢幕會顯示模糊,往大了設計,在小螢幕裝置又太浪費,而且小螢幕的手機硬體資源也會相對的緊缺,所以 根據螢幕大小使用不同的資源 是有必要的,而 cocos2d-x 也幫我們解決了這一點。寬高比: 什麼是寬高比,就是你的螢幕是方的還是長的,靠近方形的解析度如 480x320,比例為 3:2,還有 960x540 的 16:9 標準寬屏,這也算是兩種總極端情況了,如果能在這兩種比例情況做好適配基本就可以了,如果比 3:2 「更方」如 4:3,比 16:9 「更長」,那麼不論如何布局,顯示效果差距甚大,最好對固定比例優化吧。當在寬高比在一定範圍內,可以通過靈活編寫程式去適應,而在顯示效果上,cocos2d-x 為我們提供了三種模式,這些 模式更多的是幫我們解決比例不一的情況而存在 的,如果只是螢幕大小(比例一樣),那通過簡單的放大縮小即可完成。

(1)適配策略

(2)visiblesize和visibleorigin

getvisiblesize:表示獲得視口(可視區域)的大小,如果designresolutionsize跟螢幕尺寸一樣大,則getvisiblesize等於getwinsize。

getvisibleorigin:表示可視區域的起點座標,這在處理相對位置的時候非常有用,確保節點在不同解析度下的位置一致。

(3)designresolutionsize

designresolutionsize是乙個比較重要的概念,其實2.0版本的適配跟1.0版本原理差不多,都是按比例進行縮放。這個designresolutionsize表示設計方案,就是你的遊戲完美支援的解析度方案,一般根據資源的尺寸來定,自適配時會按照這個解析度計算出縮放因子。因此,這個值也應該是動態的,如果是橫屏遊戲則高度肯定是鋪滿螢幕的,寬度也要盡可能的鋪滿螢幕,因此應該選擇寬高比最大的作為設計解析度,下面的demo會給出使用方法。

(4)設定相對位置

在遊戲中使用相對位置設定座標的好處是顯而易見的,這樣就不需要為每個解析度都定義一套座標了。首先得定義一些參考點,引擎的testcpp例子中就提供了一種方法,以螢幕上可視區域的9個點作為參考點,相當於在該矩形內寫乙個公尺字,這9個點分別是:左上、左、左下、下、右下、右、右上、上、中心。

**實現較為簡單,直接在appdelegate.cpp的applicationdidfinishlaunching方法,新增如下**:

cceglview::sharedopenglview()->setdesignresolutionsize(640 , 960, kresolutionnoborder);

但看了「無間落葉」部落格後,他做了調整,**實現:

ccsize framesize = cceglview::sharedopenglview()->getframesize();

// 設定 lssize 固定值

ccsize lssize = ccsizemake(480, 320);

float scalex = (float) framesize.width / lssize.width;

float scaley = (float) framesize.height / lssize.height;

// 定義 scale 變數

float scale = 0.0f; // max(scalex, scaley);

if (scalex > scaley) else

cclog("x: %f; y: %f; scale: %f", scalex, scaley, scale);

// 根據 lssize 和螢幕寬高比動態設定 winsize

cceglview::sharedopenglview()->setdesignresolutionsize(lssize.width * scale,

lssize.height * scale, kresolutionnoborder);

效果,就由你們親自嘗試吧。

還有提醒的,若使用cocosbuilder3.0的網友們,也可以參考這篇博文來調整多適應解析度

cocos2d x螢幕適配

第一,對於螢幕適配問題,首先必須理解幾個基本的概念。framesize 實 際上就是裝置的原始解析度,開發環境中可以通過cceglview sharedopenglview setframesize 來設 置裝置的解析度大小,當然也可以可以通過cceglview sharedopenglview g...

cocos2dx 螢幕適配策略

cocos2dx的常用函式 cceglview sharedopenglview setdesignresolutionsize 設計解析度大小 即開發時為基準的螢幕解析度 cceglview sharedopenglview setframesize 設定win32模擬器的解析度 cceglvie...

cocos2d x 螢幕適配 策略

設計解析度 表示我們設計的解析度。可以這麼認為,如果將我們的程式放到這個解析度的裝置上,那麼我們的程式將完美顯示。五種適配方案 2 fixed height和fixed width根據螢幕解析度的寬 高 和設計分辨的寬 高 比例來修正設計解析度的高 寬 這兩種策略的轉換過程如圖9 3所示。圖9 3 ...