Canvas的FitWidth与FitHeight表现1.92版本与2.08版本不一致

在游戏开发中 我们使用了固定分辨率的做法将分辨率固定在2:1的条件下
在1.9.2版本中 我们是如下设置的:

然后在场景中添加了一个 超大的渲染对象 size 为 2000 * 2000 ,如下图所示


我们将模拟器的大小设为1000 * 1000,运行结果如下
.
我们可以看到,多余的地方被补上了黑边.也就是说,我们可以简单的认为在做一个固定分辨率比率的游戏.如果渲染设备不适配该比例的话,canvas 会通过 上下 或者 左右补黑边的形式,将 实际渲染区域锁定在我们希望分辨率比率下

但是适用同样的设置.在2.0.8版本中确得到了一个没有被补黑边的游戏. 效果如下:

@panda

我现在还想 继续开发固定分辨率的问题 该怎么处理

这是升级2.x的变化之一,貌似文档还是哪个帖子里有提过。
如果你想得到与1.9.x相同的效果,你可以给根Canvas节点加一个Mask组件。

加mask 会影响性能啊 并且 很多地方会引起新的问题的啊
有什么好办法嘛

我也想知道这个问题

顶上来 希望有人回答

有一样的问题, 顶起来.
canvas加mask组件是官方的解决方案吗?
其实面对浏海屏之类要把黑的地方填上图片之类的, 2.x版本这个做法合理啦.

在2.0中选择fitHeigh和fitWidth时,canvas会将视图撑满,此时你的做法就不能用一张2000x2000的图来做背景了,你可以让背景添加widget组件跟随Canvas的分辨率拉伸,使用这个方案在1.9和2.0上效果都是一致的。

想问下如果想要达到1.x版本那样, 在选择fitHeight跟fitWidth的时候, canvas(设计分辨率)以外的内容不可见, 在2.x版应该怎么设置?
在1.x版本的时候是这样的


在2.x版本的时候是这样的, 跟1.x版本的时候不一样.

根据楼上说的, 在canvas加上mask组件, 这个测试过可行(2.x版本跟1.x版本就一样了), 所以官方也是建议这么实现是吗?

2.0 改变了适配策略的实现,保持 DOM Canvas 全屏,通过设置 GL Viewport 来让场景内容居中,并处于正确位置。这样做带来的变化是,微信小游戏中比例完全正确,但是场景范围外的内容仍然是可见的。
是的,可以使用mask来做。

  1. 我们以前的多分辨率适配策略是在 16:9 到 2.2:1 之间. 这适配了绝大部分的移动设备(主要有些pad会超出这个比例).如果设备的分辨率超过了或者小于这个比率,我们会强行将Canvas 设到2.2:1 或者 16:9 .这样就会出现左右有黑边或者上下有黑边.这样做的好处主要是基于美术工作量的可控性.我们美术团队精力和实力有限.没有办法做到任意分辨率下的支持.通过限定分辨率的策略,使得美术的工作变的简单并且低风险.在2.0之前也确实工作的没有问题.团队也适应了这样的工作模式.
    2.我们自己扩展过相关的渲染代码.如果按照这个模式,我们又需要去重新调整代码去适应新的机制.并且添加mask.并不是一个有效的方案.对性能影响还是非常大的.
    3.cc.view.setFrameSize . 有同学用过嘛. 这个方法好像可以直接设置 web 上的dom 尺寸好像能解决问题. 又要花一个上午对这个函数做测试了.有测试过的同学 可以过来说说

setFrameSize 小游戏上直接失败

貌似是 微信 小游戏的问题 才修改成这个样子的喽?

2.0版本有办法实现1.9版本那种场景范围外不可见么,除了mask组建