来日可期,唯有坚持(1)
修改于2020/08/23182 浏览游戏开发攻略
关于屏幕分辨率-ui应用
屏幕分辨率是指纵横向上的像素点数,单位是px。屏幕分辨率确定计算机屏幕上显示多少信息的设置,以水平和垂直像素来衡量。
总的来说,屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。
由于我们的手机多是长方形的,而游戏中横竖ui的最大值都是1,意味着相同条件下横竖单位表示的长度是不同的。
在你横屏玩手机时,例如长宽比为2:1的手机横向0.1个单位的实际长度是你竖向0.2个单位。
另外地,每台设备的分辨率,屏幕尺寸并不相同,这种情况在手机中问题不大,但是电脑和平板相差较大,电脑和平板趋向于4:3的屏幕,手机则是在3:2,2:1之间。所以求出屏幕尺寸比尤其重要。
总的来看,利用屏幕尺寸比求UI虽然较为繁琐,但是有两大优点:1便于精确求值,2适配性好。
看一下方法
每帧循环

开调试

可以暂停,看其中一段。
第一行,这个屏幕显示是二维的,和厚度无关,无z,是一个向量,下面x表示横向分辨率,y表示纵向分辨率。只要得到第一行的向量的x,y的值就可以了,(变量功能)后面除法得到比值k,小学四则运算。注意这是第一个比值,可以叫他k0或者k1反正你看懂就可以。
如果不用此方法,打算作一个和AB实际长度相等的现代将比较困难,可以靠自己的感觉慢慢试。

像这样


但终归不是很准,不是所有屏幕分辨率都是整数比,如我这个是1.7777(见k1)。所以我们可以利用比值k,找到其他办法
方法如下,如果你设较长线段为x,则较短边为kx,反之分别为x/k,x

代码

这样对了,实际上超了屏幕,但可以看调试,这是它的第一个优点:相对准确
接下来看适配性的问题。
前文提到,不同设备的长宽比往往不同。
这个我打算放额2里讲,所以一结束了。
下面我给出一个例子
这是我自己做的,打算留给孤单的,代码就不放了。

但是有一个略为简单的我在此展示出来,这是因为45°的tan是1。在斜置多边形中(就像正方形转45度)由于内角不同,我求长度都是做高的。8边形22.5°tan是1:根号2+1,即根号2-1。看一下怎么证。
手机摄像头坏了(悲),你凑合看吧

所以tan15°=1:根号3+2,即2-根号3。
然后是白嫖时刻。
begincodeV1;name:方法_白嫖_;comment:老林白嫖系列;1:Vector3 屏幕分辨率=fun screen.size();2://想看向量值开调试,或者读取显示,这边认为你能搞定;3:Float 横向分辨率=varf Vector3.屏幕分辨率.x();4:Float 纵向分辨率=varf Vector3.屏幕分辨率.y();5:Float 屏幕长宽比k=fun float.division(var 横向分辨率:var 纵向分辨率);6:if fun float.gte(var 屏幕长宽比k:Float 1);7: //其实可以不要;8: Float a=fun create.float(Float 0.5);9: //可以是一个定值;10: Float k分之a=fun float.division(var a:var 屏幕长宽比k);11: Float b左边=fun float.minus(Float 0.5:var k分之a);12: Float b右边=fun float.add(Float 0.5:var k分之a);13: //四则运算请自学小学课本;14: Vector3 A=fun creatVariable.Vector3(Float 0.5:Float 1:Float 0);15: Vector3 B=fun creatVariable.Vector3(var b左边:Float 0.5:Float 0);16: Vector3 C=fun creatVariable.Vector3(Float 0.5:Float 0:Float 0);17: Vector3 D=fun creatVariable.Vector3(var b右边:Float 0.5:Float 0);18: //屏幕ui无需厚度;19: Float m=fun create.float(Float 8);20: UILine AB=fun ui.line(var A:var B:var m:Color 255,255,255,255);21: UILine BC=fun ui.line(var B:var C:var m:Color 255,255,255,255);22: UILine CD=fun ui.line(var C:var D:var m:Color 255,255,255,255);23: UILine DA=fun ui.line(var D:var A:var m:Color 255,255,255,255);24: //顺次连接;endcode
你复制到这就可以了,不要再复制了。这个很基本,也便于理解,轻易得来的幸福不会长久,你还是努力奋斗一下吧。下次先写3,2比较麻烦。不明白下面评论问,目前初中,应该不难吧(笑)