[]继续发个屏幕适配引发的血案
这个最基本的东西,居然好多bug...完整意料之外...
如果游戏使用SCALE_NOBORDER这个缩放模式,然后游戏内根据屏幕大小进行适配,可以保证所有元件长宽比保持不变,界面布局可以通过应用级别适配。这本身是一个非常简单的活,框架级别也就十行代码就可以处理好这个问题,但是在很多浏览器里,使用了SCALE_NOBORDER,会导致舞台实际大小超出屏幕范围,调用输入法后无法正常复位,下方会留下黑边,这时所有可交互内容的热区是期望的位置,但显示的位置会偏上,结果就是游戏显示内容有一部分在屏幕上方以外,下方又有黑边,所有元件的点击响应范围不正常。举个例子,我有一个按钮在100*100这个位置,这时看到的按钮在100*50这个位置,但点击看到的位置是无效的,点击100*100这个位置才会响应。
我看论坛上很早就有这个bug反馈,官方说无法解决,解决了这个问题,会导致新的问题...建议的方法就是,请将设计大小设置为屏幕一样大...这样的确能解决问题,但有没有想过,移动平台上,浏览器地址栏、全屏、非全屏,几个模式切换的时候,都会导致可显示区域大小变化,而Laya只能在初始化时通过init设置设计大小,所以这个方案是行不通的
于是没办法,只好建议程序员将缩放模式设置为SCALE_EXACTFIT,但这样会引起设计长宽比和屏幕长宽比不一致时导致视图被拉伸变形。好在可以通过应用层的代码修正这个问题。这样修改后,的确在原来有问题的浏览器里调用输入法后能恢复正常,程序也是等比缩放的,但新的问题来了。这时通过localToGlobal或globalToLocal转换坐标时会产生新的问题,导致得不到正常的坐标转换。
后来通过各种补丁,终于把这个坐标转换问题搞定了,以为万事大吉了,这时发现,如果设计长宽比和实际屏幕长宽比不一样的时候,所有文本输入框获得焦点后,文字会变成斜的,没错,斜的...我想让我写这个bug,我还得想想怎么才写得出来....
最后结果就是,没错,上面的折腾都是白搭...
我给Laya一个建议,抛弃Laya.init设计大小这个接口,让程序自己去适配,或者就提供给程序动态改变设计大小的接口。你们原生提供的那些缩放模式,其实在实际应用中并没有什么用,因为大部分程序,肯定要保证长宽比不变的,界面全屏适配,肯定要应用层去处理,而不是简单的用几个缩放模式就搞定的。而全屏适配,思路正确的话,其实真的就是十行代码的事。
如果游戏使用SCALE_NOBORDER这个缩放模式,然后游戏内根据屏幕大小进行适配,可以保证所有元件长宽比保持不变,界面布局可以通过应用级别适配。这本身是一个非常简单的活,框架级别也就十行代码就可以处理好这个问题,但是在很多浏览器里,使用了SCALE_NOBORDER,会导致舞台实际大小超出屏幕范围,调用输入法后无法正常复位,下方会留下黑边,这时所有可交互内容的热区是期望的位置,但显示的位置会偏上,结果就是游戏显示内容有一部分在屏幕上方以外,下方又有黑边,所有元件的点击响应范围不正常。举个例子,我有一个按钮在100*100这个位置,这时看到的按钮在100*50这个位置,但点击看到的位置是无效的,点击100*100这个位置才会响应。
我看论坛上很早就有这个bug反馈,官方说无法解决,解决了这个问题,会导致新的问题...建议的方法就是,请将设计大小设置为屏幕一样大...这样的确能解决问题,但有没有想过,移动平台上,浏览器地址栏、全屏、非全屏,几个模式切换的时候,都会导致可显示区域大小变化,而Laya只能在初始化时通过init设置设计大小,所以这个方案是行不通的
于是没办法,只好建议程序员将缩放模式设置为SCALE_EXACTFIT,但这样会引起设计长宽比和屏幕长宽比不一致时导致视图被拉伸变形。好在可以通过应用层的代码修正这个问题。这样修改后,的确在原来有问题的浏览器里调用输入法后能恢复正常,程序也是等比缩放的,但新的问题来了。这时通过localToGlobal或globalToLocal转换坐标时会产生新的问题,导致得不到正常的坐标转换。
后来通过各种补丁,终于把这个坐标转换问题搞定了,以为万事大吉了,这时发现,如果设计长宽比和实际屏幕长宽比不一样的时候,所有文本输入框获得焦点后,文字会变成斜的,没错,斜的...我想让我写这个bug,我还得想想怎么才写得出来....
最后结果就是,没错,上面的折腾都是白搭...
我给Laya一个建议,抛弃Laya.init设计大小这个接口,让程序自己去适配,或者就提供给程序动态改变设计大小的接口。你们原生提供的那些缩放模式,其实在实际应用中并没有什么用,因为大部分程序,肯定要保证长宽比不变的,界面全屏适配,肯定要应用层去处理,而不是简单的用几个缩放模式就搞定的。而全屏适配,思路正确的话,其实真的就是十行代码的事。
没有找到相关结果
已邀请:
要回复问题请先登录
1 个回复
cuixueying
赞同来自: