libgdx API之viewport:再也不用担心画面适配

来源:互联网 发布:淘宝账户怎么登录 编辑:程序博客网 时间:2024/06/05 05:53

一般来说世界尺寸是唯一的,用来确定游戏元素的大小和相对位置,由游戏开发确定。但实际运行的设备屏幕尺寸不一。一套又好又简单的适配方案从libgdx1.0版本开始com.badlogic.gdx.utils.Viewport

目前有5种适配方式供选择,你也可以扩展Viewport实现自己的方式。

    • FitViewport:按比例缩放世界直到有一个方向(上下或左右)达到屏幕尺寸,世界居中,会留黑框。
  • FillViewport:按比例缩放直到不留黑框,所以会有部分世界超出屏幕。
    • StretchViewport:将世界尺寸拉伸到屏幕尺寸,所以不会按比例,不会有黑框,不会超出。
    • ExtendViewport:先采取Fit形式,再向右或向上扩展世界尺寸充满屏幕尺寸。这个有点特别,可能会难理解,这种形式的世界尺寸是不唯一的,有一个最小的世界范围限制,最初的Fit根据这个尺寸进行,然后再增大世界尺寸直至充满屏幕。这种形式下能呈现所有画面内容,不会像Fill那样有超出的部分,也不会像Fit那样留有黑框因为扩展的世界尺寸代替了黑框,。
  • ScreenViewport:没有确定的世界尺寸,世界尺寸也是由屏幕尺寸确定,默认屏幕上一个像素对应一个世界尺寸单位,这个比例可以修改。这种形式下不会缩放,各个游戏元素按其尺寸(size)绘画,不会有黑框,屏幕尺寸越大,暴露的视野范围越大。

注:
这里的世界尺寸也称虚拟屏幕尺寸,和某些文章的世界尺寸(如整个游戏世界地图大小,虚拟屏幕尺寸是这里的世界尺寸的一个显示范围)不同,这里的尺寸是指游戏中呈现到屏幕上的大小。
可以这样理解,在游戏开发中确定在某一台设备中调试,游戏人物,地图等相对位置,大小以这个设备上呈现的为准,之后无论采用哪种适配方案在任意设备上运行都不会改变这种设置。将这个设备的屏幕尺寸当做虚拟屏幕尺寸。
或者说你正在开发一个slg,逻辑中整个大陆地图尺寸是1000*1000平方米,而你想每次呈现出的尺寸是10*5平方米,这里的呈现尺寸就是上文的世界尺寸或虚拟屏幕尺寸为10*5,在这种尺寸的设计上,树木,士兵,战船等大小和位置的确定是你在开发中进行的,完全不用理会屏幕尺寸或适配方案。最后选择使用适配方式,不同方式在不同屏幕上才有图片缩放或视野范围的区别。

严格来说游戏元素的尺寸size并不决定其画面的缩放(scale决定),size更是一种逻辑上的尺寸,有假想上的单位(米,厘米等),允许是小数。由viewport根据世界尺寸设置相机的投影规模,最后才有缩放的视觉效果。


1 0
原创粉丝点击