微信小游戏之CocosCreator多分辨率场景适配方案

本文详细介绍了小游戏开发中的分辨率适配方法,包括Canvas的设置、Widget组件的使用以及Scale策略的应用。通过理解winSize、designSize、canvasSize等概念,开发者可以实现横屏和竖屏游戏的完美适配,确保UI在不同设备上保持正确位置和比例。此外,还探讨了不同适配模式下的UI大小问题,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:小游戏开发过程中大家如何进行多分辨率适配的?

一、cocosCreater窗口大小/设计分辨率/视图边框尺寸/试图中canvas尺寸等和之间关系。

   let winSize = cc.winSize;//获取当前游戏窗口大小
   cc.error("--当前游戏窗口大小  w:" + winSize.width + "   h:" + winSize.height);
        
   let visibleSize = cc.view.getVisibleSize();
   cc.error("--视图中窗口可见区域的尺寸 w:" + visibleSize.width + "   h:" + visibleSize.height);
 
   let designSize = cc.view.getDesignResolutionSize(); //获取当前工程中的设计分辨率
   cc.error("--设计分辨率:" + designSize.width + "    h: " + designSize.height);
  
   let viewSize = cc.view.getFrameSize();
   cc.error("--视图边框尺寸:w:" + viewSize.width + "  h:" + viewSize.height);
 
   let canvasSize = cc.view.getCanvasSize();//视图中canvas尺寸
   cc.error("--视图中canvas尺寸  w:" + canvasSize.width + "  H:" + canvasSize.height);

-在不同手机上运行预览效果和参数打印,左图redmiK30/右图iphone6s。

得知:

  1. winSize==visibleSize:游戏窗口大小也就是下图圈出的绿框(图右:redmi/图左:iphone6s);
  2. designSize当前设计分辨率:720/1280;
  3. viewSize和canvasSize之间存在一个ratio倍数关系,当前试图下canvas的尺寸。

效果图中的背景图片尺寸:750/1334在不同机型上对比winSize尺寸便出现黑边,所以从美观和游戏感知度我们要进行相应的调整,也就是针对winSize进行相关适配。

那么winSize是怎么计算出来?我们又如何利用Canvas做适配呢?继续往下看~

在这里插入图片描述

二、如何设置Canvas进行游戏开发中的适配

  • 游戏开发前已经确定游戏类型:横屏/竖屏类型。
  • 目标群体中使用率最高的设备的屏幕分辨率作为设计分辨率:720/1280或者640/1136。
  • 勾选Fit Height适配高度或Fit Width适配宽度 选项,选择一种适配方案。
  • Canvas作为当前场景根节点。
    在这里插入图片描述
    不同的适配方案,会影响winSize的尺寸,这里我们先按照官方文档说明计算设计分辨率和屏幕分辨率比值:
let s_w = designSize.width / canvasSize.width;   
let s_h = designSize.height / canvasSize.height;

1、选择Fit Height(适配高度)
winSize.width = canvasSize.width * s_h;
winSize.height = designSize.height;
我们前面展示的图片就是适配高度来计算的,所以s_h>1或s_h<1就会决定我们背景图片是否存在黑边情况,所以美术同学会切图时背景图片高度和分辨率一致、宽度往往要大于720一些。这也是我们选择市场使用率较高的屏幕分辨率来做为设计分辨率的原因之一。有时候我们也会将图片尺寸切小一些然后进行代码缩放:bgNode.scale = winSize.height / bgNode.height。

2、选择Fit Width(适配宽度)
winSize.width = designSize.width ;
winSize.height = canvasSize.height * s_w;
同理我们就不再阐述,以上两种就是比较常用的选择,毕竟策划阶段已经确定横屏和竖屏。

3.Fit Height(适配高度)和Fit Width(适配宽度)同时勾选
winSize.width = designSize.width ;
winSize.height = designSize.height;
当设计分辨率宽高比大于屏幕分辨率时,会自动适配宽度;设计分辨率宽高比小于屏幕分辨率时,会自动适配高度。

4.Fit Height(适配高度)和Fit Width(适配宽度)都不勾选
winSize.width = designSize.width ;
winSize.height = designSize.height;
当设计分辨率宽高比大于屏幕分辨率时,会自动适配高度(填充满高度);设计分辨率宽高比小于屏幕分辨率时,会自动适配宽度(填充满宽度)。

往往日常开发中横屏游戏我们按照高度适配/竖屏游戏按照宽度适配,对于Ipad上我们会重新产出一张大图来做适应。

三、使用Widget组件适配UI对齐方案

到这里加入UI后目前会有哪些问题?看下图在不同机型上所示:(只在顶部左右两个UI上添加了该组件)
在这里插入图片描述

1. 明显两个UI存在了重叠。
2. 中间25宫格UI边距不同,有可能在不同设备上UI会超出屏幕。

3. 我们对齐组件还是很给力,左右边距和上边距不同设备上展示相同。

要解决1/2两个问题,是故我们引入Scale策略。

四、使用Scale策略适配UI大小问题

  let designSize = cc.view.getDesignResolutionSize();
  let designRate = designSize.height / designSize.width;
  let winsize = cc.director.getWinSize();
  let realRate = winsize.height / winsize.width;
  if(realRate > designRate){
	let scale = designRate /realRate;
   	this.node.scale = scale
  }

我对UI节点添加如上缩放功能,在看效果:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值