cocos2dx分辨率适配

一.分辨率适配基础概念

分辨率适配的这项工作完成的任务是让图片资源随着设备分辨率的变化自动放大和缩小,假如没有做这项工作(比如不使用引擎的默认支持方案),则会当屏幕分辨率和设备分辨率不一致的时候,屏幕上出现黑边或者显示不完全.

【基础概念】分辨率:是指屏幕图像的精密度,即显示器所能显示的像素有多少。如:分辨率480×320的意思是水平方向含有像素数为480个,垂直方向像素数320个。屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。同时分辨率也反映了屏幕长宽比例.通常设计分辨率会采用市场目标群体中使用率最高的设备的屏幕分辨率,比如目前安卓设备中 800 x 480和 1280 x 720 两种屏幕分辨率,或 iOS 设备中 1136 x 640 和 960 x 640 两种屏幕分辨率。这样当美术或策划使用设计分辨率设置好场景后,就可以自动适配最主要的目标人群设备。

资源分辨率:图片本身的分辨率

屏幕分辨率:用户实际设备的分辨率,可以通过director->getOpenGLView()->getFrameSize()获取,director->getOpenGLView()->setFrameSize()设置.也就是说,我们想观察游戏在何种分辨率设备上的运行效果时,只需要设置setFrameSize()就可以了.

设计分辨率:游戏运行时资源不需要缩放的正好合适的分辨率,可以通过director->getOpenGLView()->setDesignResolutionSize()设置.

二.引擎提供的适配策略

假如不使用设计分辨率(注释掉applicationDidFinishLaunching中的director->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);),一个为苹果4S(960*640)设计的图在苹果6(1334*750)的显示效果是这样的:

这种留有黑边,并且背景图不居中的效果显然不能满足需要,接下来看setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL)效果:

可以看到图片自动居中,并且整体放大了,并且保持了长款比例,缺点是左右留有黑边.传给setDesignResolutionSize的第三个参数ResolutionPolicy::SHOW_ALL被称之为适配策略,除了SHOW_ALL之外再来看其他几个策略的效果:

ResolutionPolicy::EXACT_FIT:

可以看到EXACT_FIT策略的优势是能填满整个屏幕,但是对图片有拉伸

NO_BORDER:

可以看到NO_BORDER策略的优势是可以填满整个屏幕,但是图片会超出屏幕范围.

FIXED_WIDTH:宽度自适应,高度方向可能有黑边或裁剪

FIXED_HEIGHT:高度自适应,屏幕分辨率宽高比大于设计分辨率有黑边,屏幕分辨率宽高比小于设计分辨率有裁剪.(以横屏游戏为例,FIXED_HEIGHT方案一般为采用的方案)

比如设计分辨率为1334x750的游戏,调用:setAnchorPoint(0,0):setPosition(0,0)让背景图和场景左下角重合,然后添加4个图到背景图的4个角上,当屏幕分辨率也为1334x750时如下图所示

修改高度为760时,此时屏幕分辨率宽高比小于设计分辨率出现裁剪

修改宽度为1400时,此时屏幕分辨率宽高比大于设计分辨率出现黑边

三.分辨率修改(以cocos-lua为例)

3.1 项目根目录/config.json修改设计分辨率

3.2 src/config.lua修改屏幕分辨率

四.分辨率适配项目实战

以横屏游戏使用FIXED_HEIGHT策略为例,为了避免出现黑边和裁剪那么应该做些什么

4.1 背景图居中bg:setPosition(display.center)使位置对称

4.2 使用加宽背景图解决黑边问题

在实际分辨率为1334x750的情况下,宽高比为1.78,若考虑的最大宽高比为2.13的话,如果高度为750那么宽度为1600,当美术出背景图时可以直接出1600的图,居中摆放就不会出现黑边了

4.3 背景中需要靠屏幕左边和右边的节点设置相对坐标

靠屏幕右边的节点的坐标设置为设备分辨率宽度-固定值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ellis1970

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值