quick-cocos2dx多分辨率适配,控件重叠问题

来源:互联网 发布:网络协议分析与实现 编辑:程序博客网 时间:2024/06/05 16:30

1.关于quick-cocos2dx多分辨率适配,这里就不做详细介绍,简单来说在quick里面界面布局基于display属性。查看详情

2.这里要说的是关于具体项目界面在不同机型上的适配问题。首先项目肯定是基于某一个设备屏幕尺寸来做的(比如横版800*480),并且游戏界面是按这个尺寸来拼的。

比如我想设计一个界面:

显示1:基于左上角设置坐标,

显示2:基于右上角设置坐标

显示3:基于左下角设置坐标

注意:这里显示1和显示2中间的距离很小



设置config.lua如下:

CONFIG_SCREEN_WIDTH  = 800
CONFIG_SCREEN_HEIGHT = 480
CONFIG_SCREEN_AUTOSCALE = "FIXED_HEIGHT"

然后使用quick-x-player查看显示,选择不同的View

在800*480的里面显示没有问题(请注意显示1和显示2中间的间隔很小),在3Gs中,就会出现这种情况

显示1和显示2重叠(中间为重叠区)



分析问题所在,在config.lua设置后,执行player,查看跟踪


可以看到,qx是做了缩放,然后把CONFIG_SCREEN_WIDTH改成了720。继续分析出现这种情况的原因:

首先缩放,这个和其他大小的显示设备一样没有问题。那么问题出现在哪呢。

可以看到显示2 是基于display.right做布局,但在跟踪里面看到这个值由800变成了720,意思就是说,在缩放后,屏幕右边 往左移动了54,而显示1是

基于display.left设置的,这个移动就导致了显示1和显示2重叠了。


至于这个问题怎么解决,个人觉得2个办法:

1.在设计游戏界面的时候,在基于最优的屏幕分辨率设计的时候,考虑下最小适配是否会出现这种重叠问题,前期最好能避免这个问题的出现

2.对重叠部分再次缩放,这个方法可能不是很好,因为需要针对出现这种情况的界面,考虑方法如下:

首先在800*480的屏幕下,获得显示1的宽度,显示1和显示2中间应该间隔多大的间距,比如这个总值是380,那么设定显示2的区域为400吧,如果display.right-380的值小于400,表明显示1和显示2会重叠。现在需要对显示2进行缩放,显示2为一个layer。

设置显示2的layer锚点为右上角(因为显示2是基于屏幕右上角,下面要进行缩放,要基于这个点)

判断是否需要缩放 (缩放因子是剩余的宽度/标准宽度400)

if display -380 < 400 then

layer:setScale((display -380)/400)

end

再次刷新qucik-player,可以看到显示1和显示2不会重叠了。但需要注意下,这个方法,可能会到时显示2不协调,因为只有显示2被再次缩放了。

如果还有更好的方法,请各位大虾不要吝惜,求分享


0 0