cocosUI多分辨率适配

news2024/9/21 1:48:54

需求:由于各个设备的分辨率和尺寸并不一样,所以需要一套适配系统去很好的针对不同的设备分辨率或尺寸进行适配,以给玩家一个很好的游戏体验。


目前的主流适配方案

目前,针对不同设备的适配,主流的方案通常包括以下几种:

  1. 响应式设计(Responsive Design):

    1. 响应式设计是一种流行的Web设计方法,通过使用CSS媒体查询等技术,使网站能够根据用户的设备(如手机、平板、桌面电脑)自动调整布局和样式。

    2. 这种方法可以使网站在不同设备上呈现出最佳的用户体验,但在游戏开发中的应用相对较少。

  2. 流式布局(Fluid Layout):

    1. 流式布局是一种设计方法,其中元素的宽度是相对于父容器的百分比,而不是固定像素值。这样可以使布局在不同屏幕尺寸下自动调整。

    2. 在游戏开发中,可以通过使用相对单位(如百分比)和布局技巧来实现流式布局,以适应不同设备的屏幕尺寸。

  3. 断点布局(Breakpoint Layout):

    1. 断点布局是一种设计方法,通过在特定屏幕宽度处设置断点(breakpoint),在不同屏幕尺寸下应用不同的布局和样式。

    2. 在游戏开发中,可以根据设备的屏幕宽度设置断点,针对不同尺寸的设备应用不同的布局和适配方案。

  4. 自适应设计(Adaptive Design):

    1. 自适应设计是一种根据设备特性和屏幕尺寸调整布局和功能的设计方法。可以根据设备的特征(如分辨率、屏幕尺寸等)提供不同的用户体验。

    2. 在游戏开发中,可以根据设备的特性动态调整游戏界面的布局、分辨率和功能,以提供最佳的用户体验。

Cocos Creator提供的适配方案

  1. 分辨率适配

      Cocos Creator支持多种分辨率适配策略,其通过以下几个部分完成多分辨率适配解决方案:

    1. Canvas(画布) 组件随时获得设备屏幕的实际分辨率并对场景中所有渲染元素进行适当的缩放。

    2. Widget(对齐挂件) 放置在渲染元素上,能够根据需要将元素对齐父节点的不同参考位置。

    3. Label(文字) 组件内置了提供各种动态文字排版模式的功能,当文字的约束框由于 Widget 对齐要求发生变化时,文字会根据需要呈现完美的排版效果。

    4. Sliced Sprite(九宫格精灵图) 则提供了可任意指定尺寸的图像,同样可以满足各式各样的对齐要求,在任何屏幕分辨率上都显示高精度的图像。

      详细介绍可阅读该部分的官方文档:多分辨率适配方案 | Cocos Creator

  1. 多分辨率资源管理

    • 可以使用Cocos Creator的资源管理系统,为不同分辨率的设备提供对应的资源,确保游戏在不同设备上显示效果良好。

    • 可以通过预加载资源或动态加载资源的方式,根据设备分辨率来加载适合的资源。

  1. 代码适配

    • 可以通过编写灵活的代码逻辑,根据设备的特性动态调整游戏界面的布局和功能。

    • 可以使用条件判断、设备信息查询等方式,在运行时根据设备的不同特性进行适配处理。

      Cocos creator在cc.sys中提供了丰富的关于获取用户设备信息的一系列API,包括获取手机型号、屏幕分辨率、是否是IPad、本地存储等;

      具体可查看该官方文档:Cocos Creator 2.4 API - sys

自定义的适配方案

目前在游戏开发中所使用的主要适配方案是自适应设计。

主要是通过大量使用Canvas、Widget和Label组件来完成分辨率的适配,同时利用脚本获取用户屏幕分辨率或设备型号来完成需要动态加载的界面的适配。因为如果只是使用Cocos Creator的组件,是完全无法解决问题的,这时由于Canvas的局限性所致的,具体不详细说明了,所以需要使用到自定义的适配方案。以设计尺寸为1334x750为例。

由于我们的游戏设计尺寸就是1334x750,也就是宽高比1.778(16:9),所以只要屏幕尺寸为16:9的手机,都是可以完美的适配,即所有UI的位置和设计时的位置相比不会产生任何变动,虽然目前很多的手机都是16:9,但是19:9的手机也有很多,目前对于宽高比大于16:9的做法有两种·,1是采用一张比较宽的背景图(w:1624),2是在某些类中单独做了判断,针对屏幕尺寸大于1334的设备进行了设置尺寸处理,但是通用的还是采用第一种做法。主要的问题就是在宽高比小于16:9的机型上适配上有很大的问题,虽然目前这种机型占比非常小,但是依旧是存在的。原因是由于子物体的相对位置虽然随着根节点的位置变动(尺寸改变所导致)而变动,但是子物体的尺寸并没有产生任何改变,这就导致UI看起来会挤在一起。

下面讲述搭建一个自适应界面的详细流程:

  1. 搭建游戏主界面(需要勾选Canvas的Fit Height)

  2. 为一些层级添加widget

  3. 添加适配方法以适配不同尺寸的手机


protected fitScreen(): void { 
    this.node.setContentSize(cc.winSize);//设置根节点尺寸为屏幕尺寸 
    const designSize = 1334/750;//设计尺寸 
    const realSize = cc.winSize.width/cc.winSize.height;//实际尺寸 
    if (this.nodeAlert && realSize<designSize) 
    {                 
        this.nodeAlert.setScale(realSize/designSize); //设置子节点的缩放
    } 
}

层级构建如下;

node对应根节点(CommonAlert),nodeAlert对应子节点(Alert),内容则放在子节点下。

首先是设置界面的尺寸等于屏幕尺寸,然后是计算设计尺寸和实际尺寸,如果实际尺寸比值比设计尺寸小,就需要缩放界面,而这个缩放的值,我是以设计尺寸为基准,求出的缩放值,即realSize/designSize = scale / 1(scale为所求缩放值)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2037569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony4.1上初体验rust

OpenHarmony4.1上初体验rust 前言一、准备工作二、初步调研三、初步尝试运行测试demo 四、尝试构建自己的hello world五、与C、C的交互总结 前言 由于后续可能要做rust基于OpenHarmony的开发工作&#xff0c;于是先开始一些调研性的工作&#xff0c;rust了解的内容可以参考该文…

雷达气象学(6)——径向速度图分析

文章目录 6.1 速度场分析基础6.1.1 速度图分析的基本方法6.1.2 练习&#xff1a;整层为均匀西风6.1.3 练习&#xff1a;风向随高度顺转 6.2 水平均匀风场的典型图像6.3 典型天气系统的判别6.3.1 锋面&#xff08;切变线&#xff09;系统6.3.1.1 冷锋&#xff08;冷式切变线&…

苹果是如何成为一家以产品力驱动的公司

最近在看苹果的HIG&#xff08;开发者指南&#xff09;文档&#xff0c;深刻的体会到设计/产品能力对于用户的重要性&#xff0c;为什么苹果会有“设计可以改变一切”“产品即营销”这样的理念&#xff0c;而苹果也的的确确成为了少数以产品驱动的科技公司。 文档本身有六部分…

【数据结构详解】——归并排序(动图详解)

目录 &#x1f552; 1. 归并排序&#x1f558; 1.1 递归实现&#x1f558; 1.2 非递归实现 &#x1f552; 1. 归并排序 &#x1f4a1; 算法思想&#xff1a;归并排序是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法的一个非常典型的应用。将已有序的子…

蓝牙资讯|AirPods Pro 2推送最新开发者版固件,支持点头摇头控制Siri

苹果面向开发者推送了 AirPods Pro 2 的最新固件更新&#xff0c;版本号为 7A5266c。这并非一次常规更新是为即将在秋季发布的 iOS 18 系统做准备。 根据官方信息&#xff0c;新固件将为 AirPods Pro 2 引入一系列新功能&#xff0c;包括点头或摇头控制 Siri、增强嘈杂环境下…

Visual Studio Code 使用Git详细教程

再集成之前请确保已经安装Visual Studio Code 和Git&#xff0c;并且可以找到Git文件地址。如果找不到可以在系统环境变量里面看一眼之前的配置-需要找到Git下面的cmd目录&#xff0c;一会配置使用。 打开 Visual Studio Code找到设置根据图片指引 1.找到左下角设置按钮 2.展开…

支付宝沙箱模拟支付的实现

目录 1.登录支付宝开发平台 2.使用沙箱模拟支付 3.后端代码 4.前端代码 现在几乎所有应用或者网站都需要接入支付接口&#xff0c;因为一个产品最终目的还是要赚钱&#xff0c;所以我们今天就使用支付宝提供的模拟支付的接口来实现这个功能。 1.登录支付宝开发平台 支付宝…

deepin V23前瞻丨deepin V23与飞腾腾锐D3000完成适配,持续丰富deepin操作系统硬件生态

查看原文 近日&#xff0c;自主核心芯片研发飞腾公司宣布与deepin V23完成适配&#xff0c;包含飞腾新一代桌面CPU飞腾腾锐D3000、FT-2000/64、桌面芯片飞腾腾锐D2000等多款产品&#xff0c;为用户带来更智能、安全、稳定的使用体验。 飞腾腾锐D3000集成8个飞腾自主研发的新一…

微服务-分布式事务-seata

1. 事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作&#xff0c;这些操作作为一个整体一起向系统提交&#xff0c;要么执行&#xff0c;要么都不执行 1.1 ACID事务的特点 原子性&#xff1a;针对同一事务&#xff0c;要么都完成&#xff0c;要么都不完成 一致…

实例讲解Jmeter参数化的四种方式

JMeter的四种参数化方式包括&#xff1a; 1.用户参数&#xff08;UserParameters&#xff09;&#xff1a;适用于参数取值范围很小的时候使用 2.函数助手&#xff08;FunctionHelper&#xff09;&#xff1a;可作为其他参数化方式的补充项&#xff0c;如&#xff1a;随机数生成…

使用RestHighLevelClient进行Elasticsearch Function Score查询

简介 Function Score查询在Elasticsearch中是一个强大的工具&#xff0c;它允许我们根据一个或多个函数来调整查询结果的相关性得分。这使得我们可以基于某些条件对搜索结果进行更精细的控制。本文将介绍如何在Java应用程序中使用Elasticsearch的RestHighLevelClient执行Funct…

城市夜景车水马龙视频素材去哪里找?

在这个数字化与视觉化日益融合的时代&#xff0c;城市夜景已成为吸引观众眼球的热门视频主题。无论是个人爱好者还是企业&#xff0c;都致力于通过展示繁华都市的夜晚来俘获观众的心。今天&#xff0c;我将为您介绍几个优秀的视频素材网站&#xff0c;帮助您获取高质量的城市夜…

在小红书用AI做搞笑日常图文号,单号软广赚3000+!

今天&#xff0c;当我在小红书上刷案例时&#xff0c;突然眼前一亮&#xff0c;发现了一些以沙雕日常为主题的手绘插画图文账号。这些账号的笔记点赞量高得惊人&#xff0c;每篇都有上千的点赞&#xff0c;而且植入的软广告报价也是高得吓人。 像上图这个账号&#xff0c;它只发…

MetaLLM大语言模型文本生成算法分析报告

一、算法安全与监测 算法安全 信息内容安全方面&#xff0c;MetaLLM算法必须确保生成的文本不包含有害信息&#xff0c;如不当言论、歧视性内容等。这需要在训练数据中进行严格的筛选&#xff0c;并在模型设计时加入过滤机制。信息源安全则关注于训练数据的质量和多样性&…

【sgCreateAPIFunction】自定义小工具:敏捷开发→自动化生成API接口方法代码片段脚本(接口方法代码生成工具)

sgCreateAPIFunction源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/141159084 查看使用说明 --><div :class"$options.name"><div class"sg-head">接口方法生成工具<el-dropdown:show-timeou…

vue2+OpenLayers 地图上添加渐变色(6)

渐变还有些问题需要晚上 引入 import sxs from "/views/json/sx.json"; import sx from "/views/json/sx1.json"; import GeoJSON from "ol/format/GeoJSON"; import Polygon, { fromExtent } from "ol/geom/Polygon"; import Linear…

文件上传漏洞-防御

防御文件上传的方法各种各样 1、限制文件上传的类型&#xff08;不让上传php等脚本类文件、只允许上传图片&#xff09; 2、给上传的文件重命名&#xff0c;让攻击者找不到自己传的文件在哪 3、限制文件上传大小 4、压缩上传文件 5、把上传的文件存储到文件服务器或者OSS平…

uniapp获取头像文件(二进制文件显示图片)

一、描述 由于在获取头像文件过程中&#xff0c;传递参数之后&#xff0c;请求成功了&#xff0c;但是后端给我返回了一串二进制数据流&#xff0c;傻傻的我&#xff0c;以为是乱码&#xff0c;跑去问后端大哥&#xff0c;人家跟我说这不是二进制吗&#xff0c;突然就觉得自己傻…

引领端侧多模态新时代:MiniCPM-V 2.6重磅登场

前沿科技速递&#x1f680; 在人工智能领域&#xff0c;每一次技术的进步都伴随着参数规模的提升和计算力的突破。然而&#xff0c;面壁智能公司最新推出的MiniCPM-V 2.6端侧多模态模型&#xff0c;却以相对“小巧”的8B参数量级&#xff0c;打破了传统思维&#xff0c;实现了端…

初学者入门的可视化超级色彩公式

色彩不仅是视觉元素&#xff0c;也是数据表达的重要工具。在临床数据的可视化过程中&#xff0c;合理的色彩搭配能帮助观众迅速理解数据背后的意义。例如&#xff0c;高危状态的患者可能用红色表示&#xff0c;而健康状态用绿色表示。不同色彩之间的对比度和相对位置将决定数据…