首页 > 代码库 > 【开源java游戏框架libgdx专题】-10-核心库-Viewport

【开源java游戏框架libgdx专题】-10-核心库-Viewport

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):第一个参数和第二个参数代表世界的宽度和高度,第三个参数代表渲染使用的相机。
 实例代码:
 1 package com.mygdx.viewport; 2  3 import com.badlogic.gdx.graphics.Texture; 4 import com.badlogic.gdx.graphics.g2d.Batch; 5 import com.badlogic.gdx.scenes.scene2d.Actor; 6 /** 7  * 我的演员类 8  * @author Jack(乐智) 9  * @blog dtblog.cn10  * @qq 98413718311  */12 public class MyActor extends Actor {13     private Texture texture;14     public MyActor(){15         this.init();16     }17     private void init() {18         texture=new Texture("badlogic.jpg");19     }20     @Override21     public void draw(Batch batch, float parentAlpha) {22         batch.draw(texture, 0, 0);23     }24     25 }26 27 28 package com.mygdx.viewport;29 30 import com.badlogic.gdx.ApplicationAdapter;31 import com.badlogic.gdx.Gdx;32 import com.badlogic.gdx.graphics.GL20;33 import com.badlogic.gdx.graphics.g2d.SpriteBatch;34 import com.badlogic.gdx.scenes.scene2d.Stage;35 import com.badlogic.gdx.utils.viewport.ExtendViewport;36 import com.badlogic.gdx.utils.viewport.ScreenViewport;37 import com.badlogic.gdx.utils.viewport.StretchViewport;38 39 /**40  * 伸展视口41  * @author Jack(乐智)42  * @blog dtblog.cn43  * @qq 98413718344  */45 public class UseStretchViewport extends ApplicationAdapter{46     //精灵画笔47     public SpriteBatch batch;48     //声明演员49     public MyActor actor;50     //声明舞台51     public Stage stage;52     //声明伸展视口,等比缩放53     private StretchViewport viewport;54     //声明延展视口55     private ExtendViewport extViewport;56     private ScreenViewport screenViewport;//屏幕视口57     @Override58     public void create() {59         //初始化精灵画笔60         batch=new SpriteBatch();61         //初始化演员62         actor=new MyActor();63         viewport=new StretchViewport(800, 480);64         extViewport =new ExtendViewport(200, 200);65         screenViewport=new ScreenViewport();66         //初始化舞台67         //        stage=new Stage(viewport);68         //        stage=new Stage(extViewport );69         stage=new Stage(screenViewport);70         //添加演员71         stage.addActor(actor);72 73     }74     @Override75     public void render() {76         //设置背景颜色77         Gdx.gl.glClearColor(1, 1, 1, 1);78         Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);79         //更新舞台逻辑80         stage.act();81         //绘制舞台内容82         stage.draw();83     }84 85 }

原文由博主 乐智 编辑撰写,版权归博主所有。

原文地址 http://www.dtblog.cn/1147.html 转载请注明出处!

【开源java游戏框架libgdx专题】-10-核心库-Viewport