Viewport类,又称为视口类,主要负责管理游戏相机,处理游戏世界坐标与布景层坐标的换算关系。在移动端开发,不像PC端容易。因为要适配不同分辨率的设备。libgdx处理不同的设备屏幕时,用视口处理舞台与相机的关系。主要使用其子类。
7种Viewport类型:
StretchViewport:伸展视口,支持设备宽度与高度比改变,根据参数内的宽度和高度来自动适应不同设备的屏幕
FitViewport:会保持自身参数内的宽度与高度比,并以此为依据尽量拉伸类适应屏幕。可能出现黑边。
FillViewport:填充视口。保持了布景尺寸层尺寸的纵横比,但是与FitViewport不同,该视口总是填满整个屏幕
ScreenViewport:屏幕视口。不参照虚拟屏幕尺寸,总是填满整个窗口,不拉伸也不出现黑边。可能导致部分游戏内容在小屏幕上无法显示。
ExtendViewport:延展视口。保持游戏世界的纵横比,不会出现黑边。未填满游戏窗口的部分会被拉伸,超过屏幕的游戏世界会沿着该方向延展。
StaticViewport:静态视口。不支持任何延展,始终保持一个固定纵横比。
ScalingViewport:放缩视口。可根据比例自动适配设备屏幕。
构造方法:
ExtendViewport(float minWorldWidth,float minWorldHeight):延展视口,第一个参数代表世界的最小宽度,第二参数代表游戏世界的最小高度。
ScreenViewport(Camera camera):屏幕视口。视口内相机使用参数内相机。对于无参方法默认使用正交投影相机。
ScalingViewport(Scaling scaling,float worldWidth,float worldHeight):放缩视口。第一个参数传入放缩模式,第二个和第三个参数代表游戏世界的宽度和高度
StretchViewport(float worldWidth,float worldHeight,Camera camera):伸展视口。第一和第二个参数代表世界的宽度和高度,第三个参数代表渲染使用的相机。
FillViewport(float worldWidth,float worldHeight,Camera camera):填充视口。第一个和第二个参数代表世界的宽度和高度,第三个参数代表渲染使用的相机
FitViewport(float worldWidth,float worldHeight,Camera camera):第一个参数和第二个参数代表世界的宽度和高度,第三个参数代表渲染使用的相机。
实例代码:
package com.mygdx.viewport; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.scenes.scene2d.Actor; /** * 我的演员类 * @author Jack(乐智) * @blog dtblog.cn * @qq 984137183 */ public class MyActor extends Actor { private Texture texture; public MyActor(){ this.init(); } private void init() { texture=new Texture("badlogic.jpg"); } @Override public void draw(Batch batch, float parentAlpha) { batch.draw(texture, 0, 0); } } package com.mygdx.viewport; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.utils.viewport.ExtendViewport; import com.badlogic.gdx.utils.viewport.ScreenViewport; import com.badlogic.gdx.utils.viewport.StretchViewport; /** * 伸展视口 * @author Jack(乐智) * @blog dtblog.cn * @qq 984137183 */ public class UseStretchViewport extends ApplicationAdapter{ //精灵画笔 public SpriteBatch batch; //声明演员 public MyActor actor; //声明舞台 public Stage stage; //声明伸展视口,等比缩放 private StretchViewport viewport; //声明延展视口 private ExtendViewport extViewport; private ScreenViewport screenViewport;//屏幕视口 @Override public void create() { //初始化精灵画笔 batch=new SpriteBatch(); //初始化演员 actor=new MyActor(); viewport=new StretchViewport(800, 480); extViewport =new ExtendViewport(200, 200); screenViewport=new ScreenViewport(); //初始化舞台 // stage=new Stage(viewport); // stage=new Stage(extViewport ); stage=new Stage(screenViewport); //添加演员 stage.addActor(actor); } @Override public void render() { //设置背景颜色 Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //更新舞台逻辑 stage.act(); //绘制舞台内容 stage.draw(); } }