(二)多分辨率適配方案

Cocos Creator 在設(shè)計(jì)之初就致力于解決一套資源適配多種分辨率屏幕的問(wèn)題昭殉。簡(jiǎn)單概括來(lái)說(shuō),我們通過(guò)以下幾個(gè)部分完成多分辨率適配解決方案:

  • Canvas(畫(huà)布)組件隨時(shí)獲得設(shè)備屏幕的實(shí)際分辨率并對(duì)場(chǎng)景中所有渲染元素進(jìn)行適當(dāng)?shù)目s放鞋吉。
  • Widget(對(duì)齊掛件)放置在渲染元素上捷兰,能夠根據(jù)需要將元素對(duì)齊父節(jié)點(diǎn)的不同參考位置农渊。
  • Label(文字)組件內(nèi)置了提供各種動(dòng)態(tài)文字排版模式的功能,當(dāng)文字的約束框由于 Widget 對(duì)齊要求發(fā)生變化時(shí)夭禽,文字會(huì)根據(jù)需要呈現(xiàn)完美的排版效果霞掺。
  • Sliced Sprite(九宮格精靈圖)則提供了可任意指定尺寸的圖像,同樣可以滿(mǎn)足各式各樣的對(duì)齊要求讹躯,在任何屏幕分辨率上都顯示高精度的圖像菩彬。

接下來(lái)我們首先了解設(shè)計(jì)分辨率、屏幕分辨率的概念潮梯,才能理解 Canvas(畫(huà)布)組件的縮放作用

設(shè)計(jì)分辨率和屏幕分辨率

設(shè)計(jì)分辨率 是內(nèi)容生產(chǎn)者在制作場(chǎng)景時(shí)使用的分辨率藍(lán)本骗灶,而 屏幕分辨率 是游戲在設(shè)備上運(yùn)行時(shí)的實(shí)際屏幕顯示分辨率。

通常設(shè)計(jì)分辨率會(huì)采用市場(chǎng)目標(biāo)群體中使用率最高的設(shè)備的屏幕分辨率秉馏,比如目前安卓設(shè)備中 800x480 和 1280x720 兩種屏幕分辨率耙旦,或 iOS 設(shè)備中 1136x640 和 960x640 兩種屏幕分辨率道批。這樣當(dāng)美術(shù)或策劃使用設(shè)計(jì)分辨率設(shè)置好場(chǎng)景后坟奥,就可以自動(dòng)適配最主要的目標(biāo)人群設(shè)備。

那么當(dāng)設(shè)計(jì)分辨率和屏幕分辨率出現(xiàn)差異時(shí)能耻,Cocos Creator 會(huì)如何進(jìn)行適配呢帆竹?

假設(shè)我們的設(shè)計(jì)分辨率為 800x480绕娘, 美術(shù)制作了一個(gè)同樣分辨率大小的背景圖像。


此處輸入圖片的描述
此處輸入圖片的描述

設(shè)計(jì)分辨率和屏幕分辨率寬高比相同

在屏幕分辨率的寬高比和設(shè)計(jì)分辨率相同時(shí)栽连,假如屏幕分辨率是 1600x960业舍,正好將背景圖像放大 1600/800 = 2 倍 就可以完美適配屏幕。這是最簡(jiǎn)單的情況升酣,這里不再贅述舷暮。

設(shè)計(jì)分辨率寬高比大于屏幕分辨率,適配高度避免黑邊

假設(shè)屏幕分辨率是 1920x960噩茄,同樣在下圖中以紅色方框表示設(shè)備屏幕可見(jiàn)區(qū)域下面。我們使用 Canvas 組件提供的 適配寬度(Fit Width)模式,將設(shè)計(jì)分辨率的寬度自動(dòng)撐滿(mǎn)屏幕寬度绩聘,也就是將場(chǎng)景放大 1920/800 = 2.4 倍沥割。


此處輸入圖片的描述
此處輸入圖片的描述

在設(shè)計(jì)分辨率寬高比較小時(shí),使用這種模式會(huì)裁剪掉屏幕上下一部分背景圖凿菩。

不管屏幕寬高比如何机杜,完整顯示設(shè)計(jì)分辨率中的所有內(nèi)容,允許出現(xiàn)黑邊

最后一個(gè)例子衅谷,我們屏幕分辨率假設(shè)為 640 x 960 的豎屏椒拗,如果要確保背景圖像完整的在屏幕中顯示,需要同時(shí)開(kāi)啟 Canvas 組件中的 適配高度 和 適配寬度获黔,這時(shí)場(chǎng)景圖像的縮放比例是按照屏幕分辨率中較小的一維來(lái)計(jì)算的蚀苛,在下圖的例子中,由于屏幕寬高比小于 1玷氏,就會(huì)以寬度為準(zhǔn)計(jì)算縮放倍率堵未,即 640/800 = 0.8 倍。


此處輸入圖片的描述
此處輸入圖片的描述

在這種顯示模式下盏触,屏幕上可能會(huì)出現(xiàn)黑邊渗蟹,或超出設(shè)計(jì)分辨率的場(chǎng)景圖像(穿幫)。盡管一般情況下開(kāi)發(fā)者會(huì)盡量避免黑邊赞辩,但如果需要確保設(shè)計(jì)分辨率范圍的所有內(nèi)容都顯示在屏幕上雌芽,也可以采用這種模式。

根據(jù)屏幕寬高比诗宣,自動(dòng)選擇適配寬度或適配高度

如果對(duì)于屏幕周?chē)赡鼙患舨玫膬?nèi)容沒(méi)有嚴(yán)格要求膘怕,也可以不開(kāi)啟 Canvas 組件中任何適配模式,這時(shí)會(huì)根據(jù)屏幕寬高比自動(dòng)選擇 適配高度 或 適配寬度 來(lái)避免黑邊召庞。也就是說(shuō)岛心,設(shè)計(jì)分辨率寬高比大于屏幕分辨率時(shí),會(huì)自動(dòng)適配高度(上面第一張圖)篮灼;設(shè)計(jì)分辨率寬高比小于屏幕分辨率時(shí)忘古,會(huì)自動(dòng)適配寬度(上面第二張圖)。

Canvas 組件不提供分別縮放 x 和 y 軸縮放率诅诱,會(huì)使圖像變形拉伸的適配模式

在 Cocos 引擎中髓堪,也存在稱(chēng)為 ExactFit 的適配模式,這種模式?jīng)]有黑邊,也不會(huì)裁剪設(shè)計(jì)分辨率范圍內(nèi)的圖像干旁。但是代價(jià)是場(chǎng)景圖像的 x 和 y 方向的縮放倍率不同驶沼,圖像會(huì)產(chǎn)生形變拉伸。

在場(chǎng)景中使用 Canvas 組件

新建場(chǎng)景時(shí)争群,會(huì)自動(dòng)在場(chǎng)景根節(jié)點(diǎn)上添加一個(gè)包含 Canvas 組件的節(jié)點(diǎn)回怜。在 Canvas 組件上就可以設(shè)置上文中提到的選項(xiàng):

  • 設(shè)計(jì)分辨率(Design Resolution)
  • 適配高度(Fit Height)
  • 適配寬度(Fit Width)


    此處輸入圖片的描述
    此處輸入圖片的描述

    將 Canvas 節(jié)點(diǎn)作為所有圖像渲染節(jié)點(diǎn)的根節(jié)點(diǎn),這些節(jié)點(diǎn)就都可以自動(dòng)享受 Canvas 智能適配多分辨率的縮放效果了换薄。

編輯場(chǎng)景時(shí) Canvas 的特性

在編輯場(chǎng)景時(shí)玉雾,Canvas 節(jié)點(diǎn)的尺寸(Size)屬性會(huì)保持和 設(shè)計(jì)分辨率 一致,不能手動(dòng)更改轻要。

位置(Position)屬性會(huì)保持在 (width/2, height/2)复旬,也就是和設(shè)計(jì)分辨率相同大小的屏幕中心。

由于錨點(diǎn)(Anchor)屬性的默認(rèn)值會(huì)設(shè)置為(0.5, 0.5)冲泥,Canvas 會(huì)保持在屏幕中心位置驹碍,并且 Canvas 的子節(jié)點(diǎn)會(huì)以屏幕中心作為坐標(biāo)系原點(diǎn),這一點(diǎn)和 Cocos 引擎中的習(xí)慣不同柏蘑,請(qǐng)格外注意幸冻。

運(yùn)行時(shí) Canvas 的特性

除了上述特性外,運(yùn)行時(shí) Canvas 組件還會(huì)有以下屬性變化:

* 縮放(Scale):根據(jù)前文中描述的縮放倍率計(jì)算原則咳焚,將計(jì)算后的縮放倍率賦值給 Scale 屬性洽损。
* 尺寸(Size):在無(wú)黑邊的模式中,Canvas 的 Size 屬性會(huì)和屏幕分辨率保持一致革半。在有黑邊的模式中碑定,Canvas 的 Size 會(huì)保持設(shè)計(jì)分辨率不變。

由于運(yùn)行時(shí) Canvas 可以準(zhǔn)確獲得屏幕可見(jiàn)區(qū)域的尺寸又官,我們就可以根據(jù)這個(gè)尺寸來(lái)設(shè)置 UI 元素的對(duì)齊策略延刘,來(lái)保證 UI 元素都能在屏幕可見(jiàn)區(qū)域正確顯示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末六敬,一起剝皮案震驚了整個(gè)濱河市碘赖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌外构,老刑警劉巖普泡,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異审编,居然都是意外死亡撼班,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)垒酬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)砰嘁,“玉大人件炉,你說(shuō)我怎么就攤上這事“妫” “怎么了斟冕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)板祝。 經(jīng)常有香客問(wèn)我宫静,道長(zhǎng),這世上最難降的妖魔是什么券时? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮伏伯,結(jié)果婚禮上橘洞,老公的妹妹穿的比我還像新娘。我一直安慰自己说搅,他們只是感情好炸枣,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著弄唧,像睡著了一般适肠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上候引,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天侯养,我揣著相機(jī)與錄音,去河邊找鬼澄干。 笑死逛揩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的麸俘。 我是一名探鬼主播辩稽,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼从媚!你這毒婦竟也來(lái)了逞泄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拜效,失蹤者是張志新(化名)和其女友劉穎喷众,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拂檩,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侮腹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稻励。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片父阻。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愈涩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出加矛,到底是詐尸還是另有隱情履婉,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布斟览,位于F島的核電站毁腿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苛茂。R本人自食惡果不足惜已烤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妓羊。 院中可真熱鬧胯究,春花似錦、人聲如沸躁绸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)净刮。三九已至剥哑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淹父,已是汗流浹背株婴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弹灭,地道東北人督暂。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像穷吮,于是被迫代替她去往敵國(guó)和親逻翁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容