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();
     }

 }

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

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

【开源java游戏框架libgdx专题】-10-核心库-Viewport的更多相关文章

  1. 【开源java游戏框架libgdx专题】-01-libgdx介绍

    libgdx是一款开源的java游戏框架,而且还实现了Desktop/Android/BlackBerry/iOS/HTML5这些些平台的跨平台开发.官方网址:https://libgdx.badlo ...

  2. 【开源java游戏框架libgdx专题】-05-模块描述与上下文

    模块描述(Modules overview) Input:为所有的平台提供一个统一的输入模型和处理程序. 获取触摸示例: if (Gdx.input.isTouched()) { System.out ...

  3. 【开源java游戏框架libgdx专题】-08-中文显示与绘制

    libgdx虽然是由美国人Mario Zechner(即BadlogicGames)写的开源引擎,由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的,在libgdx中的汉字都 ...

  4. 【开源java游戏框架libgdx专题】-07-文件处理

    介绍:文件处理在不同平台的文件管理是略有差异的 Desktop(Windows,Linux,Mac OS X等等):在桌面系统中,文件系统是一个大块的内存.文件可以通过当前的工作目录或者绝对路径被引用 ...

  5. 【开源java游戏框架libgdx专题】-04-接口介绍及生命周期

    在核心项目中包含6大与操作系统交互的接口,每个后端都实现了这6大接口. Application:运行应用程序并通知API的客户端应用程序级别的事件,提供日志记录设施和查询方法,例如,内存使用. Fil ...

  6. 【开源java游戏框架libgdx专题】-14-系统控件-Skin类

    Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json { ...

  7. 【开源java游戏框架libgdx专题】-11-核心库-演员类

    演员类,又称为Actor类,是libgdx开发中最基本的元素,可以被继承. 演员类,从OpenGL类的角度来理解,可以称为一个二维场景节点.它本身具有位置(postion).边界矩形(类似Retang ...

  8. 【开源java游戏框架libgdx专题】-13-开发工具-地图的使用

    支持libGDX的地图编辑器有很多种,其中比较常用的工具为Tiled地图工具.Tiled是一款非常好用的地图编辑器.下载地址:http://www.mapeditor.org TiledMap类: 又 ...

  9. 【开源java游戏框架libgdx专题】-09-动画的使用

    1.Animation类介绍   Api定义:动画是由多个帧,在设定的时间间隔序列显示.比如,一个跑步的人一个动画可以通过运行时播放这些图像无限拍照他了. 功能用法:管理动画,设置随即播放模式和播放顺 ...

随机推荐

  1. 一个简单的多线程Python爬虫(一)

    一个简单的多线程Python爬虫 最近想要抓取拉勾网的数据,最开始是使用Scrapy的,但是遇到了下面两个问题: 前端页面是用JS模板引擎生成的 接口主要是用POST提交参数的 目前不会处理使用JS模 ...

  2. BZOJ 2572 高速公路

    Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收 ...

  3. Google研究员Ilya Sutskever:成功训练LDNN的13点建议

    Google研究员Ilya Sutskever:成功训练LDNN的13点建议 摘要:本文由Ilya Sutskever(Google研究员.深度学习泰斗Geoffrey Hinton的学生.DNNre ...

  4. WebKit JavaScript Binding添加新DOM对象的三种方式

    一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而 ...

  5. Yaroslav and Sequence

    Codeforces Round #182 (Div. 1) A:http://codeforces.com/contest/301/problem/A 题意:给你2*n-1个数,你每次可以选择n个连 ...

  6. codeforces Upgrading Array

    思路:对于每个数分解质因子然后记录每一个质因子的个数,对与在b中出现的质因子就减去1,否则加1,求出总的,然后从后面一次对它们的最大公约数,然后判断除以最大公约数之后,改变量是不是变化,求最大值,变化 ...

  7. All in All

    Crawling in process... Crawling failed Description You have devised a new encryption technique which ...

  8. 硬盘IO,SAS,SATA,和HD TUNE

    SAS的接口技术可以向下兼容SATA.具体来说,二者的兼容性主要体现在物理层和协议层的兼容. SAS系统的背板(Backplane)既可以连接具有双端口.高性能的SAS驱动器,也可以连接高容量.低成本 ...

  9. struts2令牌,防止重复提交

    struts2的令牌,可以用来防止重复提交,其原理是在提交jsp页面中,写入一个隐藏域name="token",然后在action中定义一个变量token并get.set.在服务器 ...

  10. 中国linux论坛

    linux在国内经过十多年的发展,已慢慢走向成熟.昔日如雨后春笋般成长的linux网站,现在已出现了明显的两极分化.一部分已成长壮大,公司化运作,一部分面临域名出售或关闭的境地.  以笔者经验,以下十 ...