客户端各种尺寸,有没有什么全屏幕适配方案。不同屏幕的子弹反弹又要怎么处理,鱼的位置在不同屏幕下怎么显示。求大神给个思路
不处理就是最好的处理
刚和我也碰到这个问题。
我的处理方式是对逻辑尺寸的x轴和y轴分别压缩或放大。
我们渔场尺寸是1280720,客户端实际显示比如是cc.winSize.widthcc.winSize.height。适配宽度,x轴比值就是1,y轴比值就是720/cc.winSize.height。将子弹从逻辑位置映射到实际显示位置。同时鱼的碰撞矩阵也要从逻辑尺寸乘比值。
目前我想到的也是这种处理方式.等比映射
那样的话,适配宽度不同尺寸下子弹的反弹点都不一样,反弹过后,子弹的坐标就不同步了
子弹的反弹靠等比映射同步不了
将子弹的逻辑位置再按照比例映射到渲染位置。
这个处理方案我做的很复杂,大致说一下你可以参考。分两种。
首先把玩家分为2类,一类iphone 6,7,8,这样的分辨率。一类iphone x, xr xs这样的分辨率。不同类型的玩家进入不同的桌子。ipad留黑边进入iPhone6场次,这样所有的苹果都能解决。然后安卓如果是pad也是留黑边,其他的如果想简单处理就直接拉伸到最接近的范围。这样会有轻微拉伸。如果这样不能接受,那就只能做映射了。我是鱼做了映射,一些不能拉伸的ui做了映射,子弹是直接拉伸的。因为子弹有个角度问题,只能拉伸。不能映射。大致就是这样。
坐标系里面点的位置可以表示成p = ai+bj,i和j分别是基向量。a和b可以理解成比例,a就是单位向量的a倍,一般情况下我们理解的(x, y)就是,i的x被和j的y倍,这个位置的点称为(x, y)。a和b也可以理解成相对位置,相对于原点的偏移。
所以只要两个坐标系里面的x和y和相对于原点的偏移一样就可以认为是“同一个点”(相对原点)。
如果我压缩了y轴,压缩比为k,那么新的j’=kj。将逻辑坐标系中的点(x, y)映射到压缩空间后的坐标系,因为x没压缩,还是x,y轴被压缩了,新的y就是ky。在新的坐标系中(x, ky)=ai+bkj。
至于角度根本不用去考虑。你可以在编辑器中缩放图片,去考虑这个问题。不管怎么压缩,图片中像素点的相对位置是不变的。