Creator | 解析度適配時為什麼會出現黑邊?為什麼背景圖會被截斷?怎麼才能完美的適配屏幕?本文帶你一探究竟

2021-02-24 Cocos Creator 筆記


官方文檔-多解析度適配方案:https://docs.cocos.com/creator/manual/zh/ui/multi-resolution.html

Canvas(畫布)

組件隨時獲得設備屏幕的實際解析度並對場景中所有渲染元素進行適當的縮放

Widget(對齊掛件)

放置在渲染元素上,能夠根據需要將元素對齊父節點的不同參考位置

設計解析度

遊戲在設計製作時場景的解析度,即 Canvas 中的 Design Resolution 屬性,也就是圖中紫色邊框的區域

屏幕解析度

顧名思義,就是設備上屏幕的解析度

Canvas(畫布) 組件能夠隨時獲得設備屏幕的實際解析度並對場景中所有渲染元素進行適當的縮放。場景中的 Canvas 同時只能有一個,建議所有 UI 和可渲染元素都設置為 Canvas 的子節點。

選項:

Design Resolution:設計解析度(內容生產者在製作場景時使用的解析度藍本)

Fit Height:適配高度(設計解析度的高度自動撐滿屏幕高度)

Fit Width:適配寬度(設計解析度的寬度自動撐滿屏幕寬度)

通常設計解析度寬高比採用當前主流設備屏幕解析度的寬高比,比如:

iPhone7 Plus

屏幕解析度:1920*1080

寬高比:16:9

設計解析度:1280*720 或者 1334*750

iPhoneX

屏幕解析度:2436*1125

寬高比:2:1

設計解析度:1624*750

iPad

屏幕解析度:2048*1536

寬高比:4:3

設計解析度:1624*1218

當然,實際開發中並不是必須要按照上述解析度來進行設計,可根據項目需求來決定,但還是保持同寬高比比較妥當

Canvas 在做屏幕適配時,只會對整個遊戲的畫面進行縮放,並不會修改所在節點的尺寸,節點尺寸將默認跟設計解析度保持一致

理想狀態下,遊戲設計解析度的寬高比和屏幕解析度的寬高比相同,就可以完美的適配設備屏幕:

遊戲畫面縮放比例 = 屏幕解析度 / 設計解析度

但越來越多異形屏的出現,甚至有時需要同時適配 phone 和 pad,理想離我們越來越遙遠······

· 下面來看下幾種適配方案,具體取捨,需要根據項目需求來定奪

這裡以設計解析度:1334*750 為例,介紹下幾種適配方案

Canvas 設計解析度:1334*750

圖片尺寸:1334*750

為了更方便直觀,我們在場景裡添加一些位置標識

適配方法:設計解析度的高度自動撐滿屏幕高度

遊戲畫面縮放比例 = 屏幕解析度高度 / 設計解析度高度

在 iPhone7 Plus 上的表現

完美適配,圖片完全顯示

分析:

遊戲畫面縮放比例 = 1080 / 750 = 1.44

遊戲畫面縮放後的寬度 = 1334 * 1.44 = 1920

1920 = 1920(屏幕解析度寬度)

寬度恰好等於屏幕的寬度,所以完全顯示

在 iPhoneX 上的表現

圖片全部顯示,但左右會有黑邊,也就是橫向沒有鋪滿屏幕

分析:

遊戲畫面縮放比例 = 1125 / 750 = 1.5

遊戲畫面縮放後的寬度 = 1334 * 1.5 = 2001

2001 < 2436(屏幕解析度寬度)

設計解析度縮放後的寬度 < 屏幕解析度的寬度,所以出現黑邊

在 ipad 上的表現

圖片鋪滿屏幕,但左右沒有完全顯示

分析:

遊戲畫面縮放比例 = 1536 / 750 = 2

遊戲畫面縮放後的寬度 = 1334 * 2 = 2668

2668 > 2048 (屏幕解析度寬度)

設計解析度縮放後的寬度 > 屏幕解析度的寬度,所以無法完全顯示

適配方法:設計解析度的寬度自動撐滿屏幕寬度

遊戲畫面縮放比例 = 屏幕解析度寬度 / 設計解析度寬度

其原理同 Fit Height 一樣,此處不再贅述

3同時勾選 Fit Height 和 Fit Width

適配方法:完整顯示設計解析度

iPhone7Plus 上依然是完美適配,原理同  Fit Height

iPhoneX 上的表現和 Fit Height 的表現一樣,但原理不一樣

分析:

Fit Height: 

遊戲畫面縮放比例 = 1125/ 750 = 1.5

遊戲畫面縮放後的寬度 = 1334 * 1.5 = 2001

2001 < 2436(屏幕解析度寬度)

設計解析度縮放後的寬度 < 屏幕解析度的寬度,可以完全顯示,但有黑邊

Fit Width

遊戲畫面縮放比例 = 2436 / 1334= 1.8

遊戲畫面縮放後的高度 = 750 * 1.8 = 1350

1350 > 1125(屏幕解析度寬度)

設計解析度縮放後的高度 > 屏幕解析度的高度,無法完全顯示

因為需要完整的顯示出設計解析度,所以採用縮放比例較小的方式,即:

遊戲畫面縮放比例 = Fit Height = 1.5

在 ipad 上的表現

圖片完全顯示,但上下會有黑邊,也就是縱向沒有鋪滿屏幕

分析:

Fit Height: 

遊戲畫面縮放比例 = 1536 / 750 = 2

遊戲畫面縮放後的寬度 = 1334 * 2 = 2668

2668 > 2048 (屏幕解析度寬度)

設計解析度縮放後的寬度 > 屏幕解析度的寬度,無法完全顯示

Fit Width

遊戲畫面縮放比例 = 2048 / 1334 = 1.5

遊戲畫面縮放後的高度 = 750 * 1.5 = 1125

1125 < 1536(屏幕解析度高度)

設計解析度縮放後的高度 < 屏幕解析度的高度,可以完全顯示,但有黑邊

因為需要完整的顯示出設計解析度,所以採用縮放比例較小的方式,即:

遊戲畫面縮放比例 = Fit Width = 1.5

4
同時不勾選 Fit Height 和 Fit Width

適配方式:鋪滿屏幕

其原理和同時勾選 Fit Height  Fit Width 相同,但因為需要鋪滿屏幕,所以採用縮放比例較大的方式,以此來鋪滿屏幕,並且不會產生黑邊

很多情況下,針對不同的設備,適配方案也不是一成不變的

比如同一套設計樣式在 phone 和 pad 上的適配規則就會不同

所以需要通過代碼來獲取設備的屏幕解析度,然後根據寬高比,進行動態適配

let frame = cc.view.getFrameSize();let ratio = frame.width / frame.height;
let fitHeight = true;let fitWidth = false;
cc.Canvas.instance.fitHeight = fitHeight;cc.Canvas.instance.fitWidth = fitWidth;

由於篇幅原因,作為動態適配的最佳伴侶 Widget,之後再做詳解,先祭上官方文檔:

https://docs.cocos.com/creator/manual/zh/components/widget.html

Widget (對齊掛件) 是一個很常用的 UI 布局組件。它能使當前節點自動對齊到父物體的任意位置,或者約束尺寸,讓你的遊戲可以方便地適配不同的解析度


相關焦點

  • Creator | 解析度適配
    /creator/manual/zh/ui/multi-resolution.htmlCanvas(畫布)組件隨時獲得設備屏幕的實際解析度並對場景中所有渲染元素進行適當的縮放Widget(對齊掛件)放置在渲染元素上,能夠根據需要將元素對齊父節點的不同參考位置設計解析度遊戲在設計製作時場景的解析度
  • 像素,解析度和適配
    我們日常所說的二倍圖,三倍圖就是指屏幕中一個點中有兩個像素或三個像素。一個設備究竟要使用二倍圖還是三倍圖,只需看ppi和dpi的比值就可以了。(ps:plus中ppi/dpi=2.6,約等於3)所以這個44px只是相對的長度,隨著屏幕ppi的改變會改變。如果不懂不這個可能就會死抓著這個44px不變,在任何解析度的屏幕中都是使用44px,這明顯是不對的。適配也是目前來說一些設計師比較頭疼的一個問題,有很多小細節需要我們去注意。
  • 【移動適配】移動Web怎麼做屏幕適配(一)
    說白了就是同一套代碼在不同解析度的手機上跑時,頁面元素間的間距,留白,以及圖片大小會隨著變化,在比例上跟設計稿一致。圖1.  260*400的屏幕圖2.  380*400的屏幕上邊的頁面在不同大小屏幕上的展現,咋一看沒什麼問題,一般的工程師會認為已經OK了,所以前端工程師很容易忽略屏幕適配。但是對於一些精益求精的產品而言,這還達不到要求。
  • Android解析度適配寶典
    根據上一期調查結果顯示,大多數朋友希望分享關於移動端相關的教材,那麼今天就和大家說說移動端Android的解析度適配問題。        有多少射雞師在設計APP時遇到適配問題被逼瘋了,下面就給你一個再也不瘋的理由。
  • 詳解px,dp,pt,sp,ppi,dpi及屏幕適配
    本文結構如下:px:像素,構成圖片的最小單位,也是設計的最小單位;像素沒有固定的物理長度,例如iPhone3和iphone4的物理尺寸完全一樣,但是iPhone3的解析度為480*320px,而iphone4的解析度為
  • 關於移動端適配,你必須要知道的
    ,是我們在開發中經常會遇到的,這裡面可能會遇到非常多的問題:1px問題UI圖完美適配方案iPhoneX適配方案橫屏適配高清屏圖片模糊問題...在解決這些問題的過程中,我們往往會遇到非常多的概念:像素、解析度、 PPI、 DPI、 DP、 DIP、 DPR、視口等等,你真的能分清這些概念的意義嗎?本文將從移動端適配的基礎概念出發,探究移動端適配各種問題的解決方案和實現原理。一、英寸一般用英寸描述屏幕的物理大小,如電腦顯示器的 17、 22,手機顯示器的 4.8、 5.7等使用的單位都是英寸。
  • 屏幕解析度,究竟應該怎麼選?
    在此 4K 解析度的基礎上,再讓行和列像素各擴大兩倍稱為 8K。為什麼脫離屏幕的大小討論解析度沒有意義?在科技圈,很多人都會為某些數值而一驚一乍,比如今天這臺機器用上了 1K,明天那臺手機用上了 2K,甚至索尼 Xperia 手機用上了 4K,每個人都在歡呼,好像做了一件多了不起的事。 那麼為什麼我說脫開屏幕解析度談高解析度沒有任何意義呢?
  • 一種粗暴快速的Android全屏幕適配方案
    面對市面上五花八門的屏幕大小與解析度,Android基於dp與res目錄名稱來適配的方案已無法滿足一次編寫全屏幕適配的需求,為了達到最優的視覺效果,開發過程中總是需要花費較多資源進行適配。也有開發者給出了一些自己的解決方案。首先來分析一下一些常見的解決方案的現狀:1.官方適配方案
  • Android P 劉海屏適配全攻略
    然而作為苦逼的開發者,還是要去適配劉海屏的。好了,吐槽完畢,進入正題。劉海啦啦.jpeg這裡主要是介紹一下Android P中劉海屏的適配以及Android P之前的適配。為什麼要分開呢?因為Android P之前官方還沒提供API來進行適配,都是由各家廠商來提供適配方案的。
  • Android 10 適配攻略,你適配了嗎?
    具體的規則如下表:上圖將外部存儲空間分為了三部分:特定目錄(App-specific),使用getExternalFilesDir()或 getExternalCacheDir()方法訪問。無需權限,且卸載應用時會自動刪除。照片、視頻、音頻這類媒體文件。
  • 感受三星S8屏幕震撼 先過APP適配這道坎(全文)_三星 GALAXY S8...
    那怎麼解決這個問題呢?調唄,開發商將APP UI調試成適配這款屏幕的尺寸就OK了!那好調嗎?這不單是一項技術,還要揣摩界面各個元素的布置帶來的視覺舒適感等等。  現在編者以開發商的角度,為大家講一下Android的APP UI(用戶界面)是如何適配不同的手機屏幕的。  Android將設備屏幕歸類為兩種常規屬性:尺寸和解析度。
  • 2020 年,從全新的 iPhone 12 再談 iPhone 屏幕尺寸
    如果你還沒有閱讀過之前的 文章 ,強烈推薦你先閱讀,否則本文中的提到到的一些概念你可能會雲裡霧裡😜(本文章首發於少數派,並發布於我的個人博客 ,也歡迎你來我的個人博客「 向遠公園 | Step Park」逛一逛😄。)
  • Android屏幕適配之dp(最直觀的解讀)
    Android屏幕適配由來已久,關鍵在於屏幕尺寸與屏幕解析度的變化巨大。在成千上百種機型面前,px單位已難以適應。1.同樣尺寸,不同解析度:1080px的寬度上顯示100px 比例是100/1080720px的寬度上顯示100px 比例是100/7202.同解析度,不同尺寸:1080px在4.7寸上顯示100px 1080px在6.1寸上顯示100px如果使用多套px文件方案來適配,市面上少說上百種寸,需要的文件太多了。
  • 那些值得你去細細研究的Drawable適配(上)
    王月半子的博客地址:http://blog.csdn.net/wrg_20100512Android適配的問題太多,有屏幕尺寸的適配、屏幕解析度的適配以及不同系統版本的適配。反映在代碼上,就是需要在資源文件上下功夫,主要是layout和drawable目錄下的文件,這裡主要研究一下drawable的適配。首先我們先熟悉一下基本的概念。
  • iPhone X主流APP適配情況報告:一口老血噴出來
    其實這一問題理應非常容易解決,比如B站自行加入畫面上下顛倒的功能,因為如果使用蘋果自帶的屏幕重力感應來翻轉屏幕,那麼下方那根長條也會跟隨屏幕翻轉而移動。或者像隔壁的優酷一樣,將自製字幕設計到避開Home Indicator的位置。總之這是一個非常容易解決並且確實已經影響到了觀看體驗的問題,但是bilibili卻並沒有做出應對。
  • 如何規範圖表的適配——以環形圖為例
    本文以環圖的適配問題,探索規範圖表適配的一般方法。一、了解環形圖了解環圖之前,我們必須先了解圓餅圖。餅圖借用了餅乾的隱喻,用圓形切角的方式呈現各分量在整體中的比例。而環形圖是圓餅圖的一種變形,在視覺上,由於去掉中心的部分,使得環形圖較圓餅圖更「輕」 ,但依然能夠很好的詮釋數據間的佔比關係。
  • 移動端適配(一)設備獨立像素1px問題,前端需要知道
    最後,為什麼要提起vw,vh?小程序最近很火,它在它的開發文檔裡也提到這個單位,用來做適配。也就是說小程序是支持這兩個單位的。驗證了那句話,事出必有因。2.然後你需要知道什麼是屏幕尺寸、屏幕解析度、屏幕像素密度?屏幕尺寸:指屏幕的對角線的長度,單位是英寸。
  • 這些APP說自己已經適配iPhone X了?我一個白眼翻上天去
    而作為bilibili的主營業務,在引進類的原聲動畫播放時,卻出現了自製字幕被Home Indicator,也就是屏幕下方的那根長條遮擋的現象,看來日語不過N1,英語沒有專八簡直沒有辦法在B站看原聲劇了。其實這一問題理應非常容易解決,比如B站自行加入畫面上下顛倒的功能,因為如果使用蘋果自帶的屏幕重力感應來翻轉屏幕,那麼下方那根長條也會跟隨屏幕翻轉而移動。
  • 行動裝置適配基礎知識速成
    這裡面還不包括安卓設備各種奇葩的屏幕解析度,還有什麼dpi、ppi、pt、dp、sp等等各種單位,以及複雜的計算公式,對於剛接觸移動端設計的設計師來說,早就被搞的暈頭轉向。而實際上看似複雜的東西當你掌握了規律以後,你會發現原來是這麼的簡單。
  • 網際網路小白也能看懂的APP適配及基礎概念
    160ppi時1px的長度;(補充了解:sp:scale-independent pixel,安卓開發字體大小單位)3.硬體系統相關概念ppi:pixel per inch,像素密度,圖像採樣率(在圖像中,每英寸所包含的像素數),一般網頁的像素密度就是72px,ppi的數值越高,畫面會越細膩;dpi:dots per inch,列印解析度(每英寸所能列印的點數