cocos 分辨率

本文详细介绍了Cocos2d-x游戏中分辨率的三个关键概念:resourceSize、designSize和screenSize,以及ContentScaleFactor的作用。在不同分辨率适配策略下,如kResolutionNoBorder、kResolutionShowAll和kResolutionExactFit,可能出现的显示问题进行了探讨,并通过一个具体的bug案例分析了菜单元素与图片大小不匹配的原因。

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

分辨率有三个相关的东西:resourceSize资源尺寸,designSize设计尺寸,screenSize屏幕尺寸。


假如屏幕尺寸为800*1200,而设计尺寸为320*480(cocos默认都是这个值),而提供的资源没有800*1200,假设使用640*960的资源。


ContentScaleFactor 则为640/320=2,存储在CCDirector中,资源到设计尺寸的缩放时使用的宏CC_RECT_POINTS_TO_PIXELS转换的。


在显示的时候,又将设计尺寸转换为屏幕尺寸,CC_RECT_PIXELS_TO_POINTS进行转换。在CCEGLViewProtocol::setDesignResolutionSize中保存由设计尺寸到屏幕尺寸的缩放。最后一个参数的意义为:

kResolutionNoBorder:超出屏幕的部分会被裁剪,两侧没有黑边,铺满屏幕,按图片原始比例显示,图片不变形。
kResolutionShowAll:整个游戏界面是可见的,会按原始比例进行缩放,图片不变形,但两侧可能会留有黑边,不铺满屏幕。
kResolutionExactFit:整个游戏界面是可见的,图片可能会进行拉伸或者压缩处理,铺满屏幕,图片会变形。


曾遇到的bug:在以上参数下,我用ccbi创建了一个menuImage,然后,使用js脚本cc.TextureCache.getInstance().addImage("buttonUI/page-0001.png");加载Texture,然后以大小cc.rect(0,0, selected.getContentSizeInPixels().width, selected.getContentSizeInPixels().height),创建SpriteFrame,然后传入setNormalSpriteFrame接口,结果发现创建的menu总是比图片大了许多(2.5倍),原来在创建SpriteFrame的时候,CC_RECT_POINTS_TO_PIXELS将传入的图片大小,放大到屏幕尺寸,导致图片跑到了menu的左上角。menu创建的时候再次将放大到屏幕尺寸,导致显示的menu比预期大了2.5倍,而图片显示正常,只是位置错乱(思考为啥)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值