CocosCreator引擎中designSize、visibleSize疹瘦、frameSize等屬性的計算公式

原文地址 www.chuyouxiang.com

在使用 CocosCreator 引擎開發(fā)的過程中崩哩,如果需要做不同寬高比屏幕的適配或旋轉(zhuǎn),必定會接觸到 designSize、visibleSize邓嘹、frameSize 等不同屬性酣栈,它們各代表什么意思?區(qū)別是什么汹押?本文將解答這些問題矿筝,并總結(jié)這幾個屬性之間的推導公式。

1 簡介

在使用 CocosCreator 引擎開發(fā)的過程中鲸阻,如果需要做不同寬高比屏幕的適配或旋轉(zhuǎn)跋涣,必定會接觸到 designSize、visibleSize鸟悴、frameSize 等不同屬性陈辱,它們各代表什么意思?區(qū)別是什么细诸?本文將解答這些問題沛贪,并總結(jié)這幾個屬性之間的推導公式。

2 定義

designSize

視圖的設(shè)計分辨率震贵。

運行中可通過以下代碼獲壤场:

const designSize = view.getDesignResolutionSize();


這是開發(fā)者自己在 CocosCreator 中設(shè)定的尺寸,代表一個固定的寬高比猩系。

devicePixelRatio

設(shè)備或瀏覽器像素比例媚送。

在運行中可通過以下代碼獲取:

const devicePixelRatio = view.getDevicePixelRatio();


它的值由設(shè)備硬件決定寇甸,代表一個邏輯點有幾個像素塘偎,例如 iPhone7 設(shè)備上是 2攘已。

frameSize

視圖中邊框尺寸言秸。在 native 平臺下,它返回全屏視圖下屏幕的尺寸驶社。在 web 平臺下绽淘,它返回 canvas 元素的外層 DOM 元素尺寸涵防。

在運行中可通過以下代碼獲取:

const frameSize = view.getFrameSize();


這是一個最重要的屬性沪铭,因為之后的幾個屬性都可以根據(jù)它推導出來壮池。在 H5 平臺,它等同于canvas.clientWidth/clientHeight伦意,在微信平臺火窒,它等同于window.screenWidth/screenHeightwindow.innerWidth/innerHeight

它的值也是由設(shè)備硬件決定驮肉,實際上等于 設(shè)備屏幕分辨率 / devicePixelRatio,例如:iPhone7 的屏幕分辨率是750x1334已骇,則運行在 iPhone7 設(shè)備上的全屏游戲的 frameSize 是分辨率除以 2离钝,即375x667票编。

canvasSize

視圖中 canvas 的尺寸。在 native 平臺下卵渴,它返回全屏視圖下屏幕的尺寸慧域。在 Web 平臺下,它返回 canvas 元素尺寸浪读。

在運行中可通過以下代碼獲任袅瘛:

const canvasSize = view.getCanvasSize();


閱讀引擎源碼可知,它實際上等于 frameSize * devicePixelRatio碘橘;

scale

這是將畫布像素分辨率放到設(shè)計分辨率的比例互订。

在運行中可通過以下代碼獲取:

const scaleX = view.getScaleX();
const scaleY = view.getScaleY();


一般適配都是等比縮放的痘拆,所以 scaleX 和 scaleY 相等仰禽,但它的值根據(jù)屏幕適配方式不同而不同。閱讀引擎源碼可知纺蛆,當 FixedHeight 時吐葵,scale = canvasSize.height / design.height;當 FixedWidth 時桥氏,scale = canvasSize.width / design.width温峭;

visibleSize

視圖窗口可見區(qū)域尺寸。

在運行中可通過以下代碼獲茸种А:

const visibleSize = view.getVisibleSize();


閱讀引擎源碼可知凤藏,它的值實際上等于 canvasSize / scale。這是一個在 UI 適配中使用頻率很高的屬性祥款,例如清笨,想讓一個節(jié)點放到屏幕中央,通橙絮耍可這樣:

const vsize = view.getVisibleSize();
node.setPosition(vsize.width/2, vsize.height/2);


visibleSizeInPixel

視圖窗口可見區(qū)域像素尺寸抠艾。

閱讀引擎源碼可知,它的值實際上等于 visibleSize * scale桨昙;

3 總結(jié)

devicePixelRatio检号、frameSize 由設(shè)備硬件決定,designSize 由開發(fā)者自定義蛙酪,無論是哪種屏幕適配方式齐苛,根據(jù)以上 3 者,都可以推導出剩余的所有屬性桂塞。

推導順序如下:
(frameSize * devicePixelRatio) -> canvasSize -> scale -> visibleSize -> visibleSizePixel

最后凹蜂,以 iPhone7 設(shè)備為例,它的屏幕分辨率是750x1334,假設(shè)開發(fā)者的設(shè)計分辨率為640x960玛痊,適配方式為FixedWidth汰瘫,則各個屬性值的總結(jié)如下:

屬性? ? ? ? 值? ? ? ? 計算公式


designSize? ? ? ? 640 x 960? ? ? ? ? ? 開發(fā)者自定義


devicePixelRatio? ? ? ? 2? ? ? ? ? ? ? ? 硬件決定


frameSize? ? ? ? ? 375 x 667? ? ? 硬件決定,等同于window.screenWidth/screenHeight


canvasSize? ? ? ? 750 x 1334? ? ? canvasSize = frameSize * devicePixelRatio


scale? ? ? ? ? ? ? 1.17? ? ? ? ? scale = canvasSize.width / design.width


visibleSize? ? ? ? 640 x 1138? ? ? ? visibleSize = canvasSize / scale


visibleSizeInPixel? ? 750 x 1334? ? ? ? visibleSizeInPixel = visibleSize * scale


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擂煞,一起剝皮案震驚了整個濱河市混弥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌对省,老刑警劉巖蝗拿,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒿涎,居然都是意外死亡哀托,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門同仆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萤捆,“玉大人,你說我怎么就攤上這事俗批∷谆颍” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵岁忘,是天一觀的道長辛慰。 經(jīng)常有香客問我,道長干像,這世上最難降的妖魔是什么帅腌? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮麻汰,結(jié)果婚禮上速客,老公的妹妹穿的比我還像新娘。我一直安慰自己五鲫,他們只是感情好溺职,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著位喂,像睡著了一般浪耘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塑崖,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天七冲,我揣著相機與錄音,去河邊找鬼规婆。 笑死澜躺,一個胖子當著我的面吹牛蝉稳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苗踪,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼颠区,長吁一口氣:“原來是場噩夢啊……” “哼削锰!你這毒婦竟也來了通铲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤器贩,失蹤者是張志新(化名)和其女友劉穎颅夺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛹稍,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡吧黄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唆姐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗慨。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奉芦,靈堂內(nèi)的尸體忽然破棺而出赵抢,到底是詐尸還是另有隱情,我是刑警寧澤声功,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布烦却,位于F島的核電站,受9級特大地震影響先巴,放射性物質(zhì)發(fā)生泄漏其爵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一伸蚯、第九天 我趴在偏房一處隱蔽的房頂上張望摩渺。 院中可真熱鬧,春花似錦剂邮、人聲如沸摇幻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囚企。三九已至,卻和暖如春瑞眼,著一層夾襖步出監(jiān)牢的瞬間龙宏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工伤疙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留银酗,地道東北人辆影。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像黍特,于是被迫代替她去往敵國和親蛙讥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345