看cc. view源码发现 宽和高适配都不选的话是无黑边模式,但是此时的visible size是设计分辨率大小,并不是屏幕对应的世界坐标上的大小。canvas组件用这个值赋值给了自己的node结点,而摄像机的边框大小用的是屏幕大小对应的世界坐标大小。所以canvas中会有上下或者左右两边中的东西显示不了。显示不了的大小是visiblesize或者设计分辨率中的宽或高减去cc. game. canvas对应世界坐标系中的的宽或者高,有人知道我这样理解是错的还是对的?错在哪里?
摄像机的大小等于屏幕的世界分辨率大小。所以比较摄像机,设计分辨率,canvas组件大小即可。发现canvas组件的fitwidth和fitheight都选,visible rect大小等于设计分辨率大小,但是因为摄像机大小比设计分辨率还大,加上canvas的结点大小取得是visible rect,也就是设计分辨率大小,所以排版没问题。但是fitwidth和fitheight都不选的话,此时摄像机大小小于设计分辨率,而且canvas大小取得还是visible rect大小,也就是等于设计分辨率大小,它取得并不是摄像机镜头的大小。所以此时在canvas上排版有部分显示不出来。canvas对它的处理错了。fitwidth和fitheight任选其一的话visible rect大小等于摄像机镜头大小,此时没问题。有人吗?怎么看都是bug啊
你是说的哪个版本?最新的版本camera大小是和canvas大小一致的。
github上的,camera大小是cc. game. canvas大小除以cc. view. _scale,canvas组件大小是visible size大小。canvas组件都不选择fitwidth和fitheight的话,无边界模式中visible size大小是在platform目录中的view源码中的视口大小除以_scale。并不是屏幕大小cc.game.canvas大小除以_scale。在源码中一除的话就变成设计分辨率大小了。只有无边界模式会有这种情况。
你说的camera大小是哪个值?我理解的camera大小是cc.Camera.orthoSize,所拍摄到画面的高的一半。拍摄画面的比例与viewport相关。而你说的visible size在1.x和2.x的表现是不一样的:
在1.x中被设置成与cc.game.canvas同的比例
在2.x中被设置成与viewport同比例
所以,好像这样就导致No Border模式,在1.x的时候可以直接根据cc.Canvas节点来布局UI,但是在2.x中却不行。如果是IOS,布局使用getSafeAreaRect会更好一些。其他情况,使用cc.game.canvas的比例来布局UI。
对,2. x中noborder模式布局是从设计分辨率减去cc. game. canvas除以cc. view. _scale的大小开始布局,只需要将canvas组件大小设置成上面的大小就可以所有模式都根据canvas来布局了。无边界模式canvas节点位置还继续保持在设计分辨率的中间。
不建议设置Canvas节点的尺寸,为了方面的话,可以建一个空节点作为UI节点的根节点,设置为cc.game.canvas的比例,这样就可以Widget布局了。
嗯嗯,noborder模式按照你的建议好些。单独弄个ui节点和摄像机大小一样。因为此时canvas组件宽高比和屏幕不一样,和设计分辨率一样。这是设计时根据宽高比这样设计的