CocosCreator引擎中designSize、visibleSize、frameSize的区别

本文介绍了CocosCreator引擎中涉及屏幕适配的关键属性,包括designSize(设计分辨率)、devicePixelRatio(设备像素比例)、frameSize(视图边框尺寸)以及它们之间的关系和推导公式。通过devicePixelRatio和frameSize可以计算canvasSize、scale、visibleSize等,这些属性在不同屏幕适配和UI布局中起到重要作用。

1 简介

在使用CocosCreator引擎开发的过程中,如果需要做不同宽高比屏幕的适配或旋转,必定会接触到designSize、visibleSize、frameSize等不同属性,它们各代表什么意思?区别是什么?本文将解答这些问题,并总结这几个属性之间的推导公式。

2 定义

designSize

视图的设计分辨率。

运行中可通过以下代码获取:

const designSize = view.getDesignResolutionSize();

这是开发者自己在CocosCreator中设定的尺寸,代表一个固定的宽高比。

devicePixelRatio

设备或浏览器像素比例。

在运行中可通过以下代码获取:

const devicePixelRatio = view.getDevicePixelRatio();

它的值由设备硬件决定,代表一个逻辑点有几个像素,例如iPhone7设备上是2。

frameSize

视图中边框尺寸。在 native 平台下,它返回全屏视图下屏幕的尺寸。在 web 平台下,它返回 canvas 元素的外层 DOM 元素尺寸。

在运行中可通过以下代码获取:

const frameSize = view.getFrameSize();

这是一个最重要的属性,因为之后的几个属性都可以根据它推导出来。在H5平台,它等同于canvas.clientWidth/clientHeight,在微信平台,它等同于window.screenWidth/screenHeightwindow.innerWidth/innerHeight

它的值也是由设备硬件决定,实际上等于 设备屏幕分辨率 / devicePixelRatio,例如:iPhone7的屏幕分辨率是750x1334,则运行在iPhone7设备上的全屏游戏的 frameSize 是分辨率除以2,即375x667

canvasSize

视图中 canvas 的尺寸。在 native 平台下,它返回全屏视图下屏幕的尺寸。在 Web 平台下,它返回 canvas 元素尺寸。

在运行中可通过以下代码获取:

const canvasSize = view.getCanvasSize();

它实际上等于 frameSize * devicePixelRatio

scale

这是将画布像素分辨率放到设计分辨率的比例。

在运行中可通过以下代码获取:

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

一般适配都是等比缩放的,所以scaleX和scaleY相等,但它的值根据屏幕适配方式不同而不同。当 FixedHeight 时,scale = canvasSize.height / design.height;当 FixedWidth 时,scale = canvasSize.width / design.width

visibleSize

视图窗口可见区域尺寸。

在运行中可通过以下代码获取:

const visibleSize = view.getVisibleSize();

它的值实际上等于 canvasSize / scale。这是一个在UI适配中使用频率很高的属性,例如,想让一个节点放到屏幕中央,通常可这样:

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

视图窗口可见区域像素尺寸。

它的值实际上等于 visibleSize * scale

3 总结

devicePixelRatio、frameSize由设备硬件决定,designSize由开发者自定义,无论是哪种屏幕适配方式,根据以上3者,都可以推导出剩余的所有属性。

推导顺序如下:
(frameSize,devicePixelRatio) -> canvasSize -> scale -> visibleSize -> visibleSizePixel

最后,以iPhone7设备为例,它的屏幕分辨率是750x1334,假设开发者的设计分辨率为640x960,适配方式为FixedWidth,则各个属性值的总结如下:

属性计算公式
designSize640 x 960开发者自定义
devicePixelRatio2硬件决定
frameSize375 x 667硬件决定,等同于window.screenWidth/screenHeight
canvasSize750 x 1334canvasSize = frameSize * devicePixelRatio
scale1.17scale = canvasSize.width / design.width
visibleSize640 x 1138visibleSize = canvasSize / scale
visibleSizeInPixel750 x 1334visibleSizeInPixel = visibleSize * scale
<think>根据用户的问题,用户想在Cocos Creator 2.4中获取设计分辨率。结合引用内容,引用[1]中提到“获取设计分辨率的代码如下 let designSize = cc.view.getDesignResolutionSize();”,因此我们可以直接使用这个方法。 需要注意的是,引用[1]中提到的代码示例是有效的,而且Cocos Creator 2.4的API与引用中描述的一致。因此,我们可以直接给出代码示例。 同时,引用[2]中提到了通过修改boot.js文件来设置设计分辨率,但用户的问题是如何获取,而不是设置。所以这里我们只关注获取的方法。 回答结构: 1. 直接给出获取设计分辨率的代码。 2. 简要说明代码的作用。 3. 可能补充一些注意事项(如果有的话)。 另外,根据系统指令,我们需要生成相关问题。 注意:由于引用[1]中已经明确给出了代码,我们只需直接引用即可。 </think> 在 Cocos Creator 2.4 中获取设计分辨率的方法如下: ### 获取设计分辨率的代码 ```javascript // 获取设计分辨率(返回值为 cc.Size 对象) let designSize = cc.view.getDesignResolutionSize(); console.log("设计分辨率宽度: " + designSize.width); console.log("设计分辨率高度: " + designSize.height); ``` ### 关键说明 1. **设计分辨率**:在编辑器 Canvas 组件中设置的分辨率(默认 960×640),是内容布局的基准尺寸[^1] 2. **API 说明**: - `cc.view.getDesignResolutionSize()` 返回 `cc.Size` 对象 - 通过 `.width` 和 `.height` 属性获取具体数值 3. **使用场景**: - 计算 UI 控件的适配比例 - 实现多分辨率下的精确布局 - 调试不同设备的分辨率适配效果 ### 注意事项 - 设计分辨率可通过 Canvas 组件修改(层级管理器 → Canvas节点 → 属性检查器) - 网页预览时可在 `boot.js` 中修改默认设计分辨率(路径:`CocosCreator/resources/static/preview-templates/boot.js`)[^2] - 实际运行分辨率通过 `cc.view.getFrameSize()` 获取(硬件分辨率)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值