照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终。一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动、元素的放大、旋转等操作。

Camera分为PerspectiveCamera(远景照相机)和OrthographicCamera(正交照相机)。

PerspectiveCamera为正常的照相机,当距离物体越远,则物体越小,一般在3D空间中使用。

OrthographicCamera忽略了其Z轴,不管距离物体多远,其大小始终不变,一般在2D平面中使用。

由于我们所涉及的游戏界面都是在2D平面中,因此我们现在只讨论OrthographicCamera。

OrthographicCamera继承自Camera。

主要函数:

SetToOtho(ydown,width,height)指定是否y轴朝下,width和height分别表示照相机的视口宽度和高度。此函数同时还将位置设定在其中心,并执行一次update。

position.set( x, y )指定照相机的位置,一般设置在视口中心,width/2,height/2。

update()更新,就是更新其位置、角度和放大倍数等参数。

translate(x,y,z) 移动

具体代码:

 package com.fxb.newtest;

 import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; public class Lib017_Camera extends ApplicationAdapter{ OrthographicCamera camera;
Texture texture;
SpriteBatch batch; @Override
public void create() {
// TODO Auto-generated method stub
super.create();
batch = new SpriteBatch();
texture = new Texture( Gdx.files.internal( "data/pal4_0.jpg" ) ); camera = new OrthographicCamera();
camera.setToOrtho( false, 480, 320 ); camera.rotate( 45 );
camera.zoom = 2f;
} public void HandleInput(){
if( Gdx.input.isKeyPressed( Input.Keys.LEFT ) ){
camera.position.add( 2f, 0, 0 );
}
else if( Gdx.input.isKeyPressed( Input.Keys.RIGHT ) ){
camera.position.add( -2f, 0, 0 );
}
else if( Gdx.input.isKeyPressed( Input.Keys.UP ) ){
camera.position.add( 0, -2f, 0 );
}
else if( Gdx.input.isKeyPressed( Input.Keys.DOWN ) ){
camera.position.add( 0, 2f, 0 );
}
else if( Gdx.input.isKeyPressed( Input.Keys.D ) ){
camera.zoom -= 0.05f;
}
else if( Gdx.input.isKeyPressed( Input.Keys.F ) ){
camera.zoom += 0.05f;
}
else if( Gdx.input.isKeyPressed( Input.Keys.A ) ){
camera.rotate( 1 );
}
else if( Gdx.input.isKeyPressed( Input.Keys.S ) ){
camera.rotate( -1 );
}
} @Override
public void render() {
// TODO Auto-generated method stub
super.render();
Gdx.gl.glClearColor( 0, 1, 1, 1 );
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT ); HandleInput();
//camera.position.add( 0.5f, 0, 0 );
camera.update(); batch.setProjectionMatrix( camera.combined );
batch.begin();
batch.draw( texture, 0, 0 );
batch.end(); } @Override
public void dispose() {
// TODO Auto-generated method stub
batch.dispose();
texture.dispose();
super.dispose();
} }

运行效果:

从代码中也可以看出来:

按左右上下按键分别会使图片左右上下移动,而Camera却是向相反的方向移动。

ASDF按键分别对应逆时针旋转、顺时针旋转、放大、缩小等操作。

libgdx学习记录17——照相机Camera的更多相关文章

  1. libgdx学习记录22——3d物体创建

    libgdx是一个强大的游戏框架,不仅支持2d部分,同时还支持3d部分. libgdx的3d部分投影主要通过PerspectiveCamera实现. 物体的显示过程: 1. 创建远景相机,角度一般设为 ...

  2. libgdx学习记录18——Box2d物理引擎

    libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创 ...

  3. libgdx学习记录11——平铺地图TiledMap

    地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机Otho ...

  4. libgdx学习记录4——舞台Stage

    libgdx总的来说是一个框架,而不是一个成熟的游戏引擎.Stage是其中一个比较好的封装,里面自带Camera.SpriteBatch等常用渲染绘图工具. 下面是一个简单的添加图片,并让镜头左右上下 ...

  5. libgdx学习记录2——文字显示BitmapFont

    libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...

  6. libgdx学习记录3——动画Animation

    libgdx动画采用Animation实现,即通过帧动画实现. 代码如下: package com.fxb.newtest; import com.badlogic.gdx.ApplicationAd ...

  7. libgdx学习记录26——Polygon多边形碰撞检测

    libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...

  8. libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint

    Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Bo ...

  9. libgdx学习记录20——多线程MultiThread资源处理

    在libgdx中,一般的逻辑流程都在rende()函数中执行,这个函数是由opengl的渲染线程调用的,一般的图形显示和逻辑处理都在这个线程中. 一般情形下,在这个线程中处理就行了.但是当某些逻辑处理 ...

随机推荐

  1. linux下opencv编译

    .tar.gz cd opencv-/ cd .. mkdir my_build_dir cd my_build_dir cmake ../opencv- -DWITH_GTK_2_X=ON -DCM ...

  2. HTML中meta标签作用及属性总结

    在前端开发中编写html静态网页模板时,head标签内总是会带上许多meta标签,大多数时候并不十分了解这些标签的具体作用,只是别人写了我们也写上吧! 今天小编特意查询了一下关于网页中meta标签的作 ...

  3. c#考勤统计

    现在项目需求,需要从多张表中获取数据,组装到一个实体对象中,并通过计算统计出每个员工的考勤记录.(全凭自己思考做的,不足的地方希望各位大神指正!毕竟自己能力有限,思考不全) 考勤统计列表: 明细列表: ...

  4. [POWERSHELL] [.net 3.5] [Windows Server] 在Windows Server上安装.NET3.5

    Install-WindowsFeature Net-Framework-Core -source \\network\share\sxs

  5. Linux内核参数基础优化

    web 服务负载均衡器常规网站服务器优化的基本配置: net.ipv4.tcp_fin_timeout =2 net.ipv4.tcp_tw_reuse =1 net.ipv4.tcp_tw_recy ...

  6. python基础学习8----文件基本操作

    一.文件的打开,open函数 f = open(file_name,mode)#创建文件对象 打开模式有很多种 1. 'r': 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. 2. ...

  7. beta冲刺————第五天(5/5=1)

    今天的主要内容是前后端的对接: 通过前几天的对接,我们发现后端传给前端内容是可以很完美的显示出来的,说明文章格式以及一些默认规则都是OK的. 然后就是前端从云服务器上面接受到文章的具体内容,在这一个环 ...

  8. python第三十六课——1.可迭代对象

    1.可迭代对象: 满足前提: 只要能被循环操作的对象,就可以可迭代对象 举例: str.list.tuple.set.dict.range.generator... 高效的检测一个对象是否是可迭代对象 ...

  9. FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决

    1:感觉见鬼了一般存储JSONObject中的字段竟然不见了? JSONObject object=new JSONObject(); Map fields = new HashMap(); fiel ...

  10. Scala学习之路 (五)Scala的关键字Lazy

    Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载). 惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量. 在Java中,要实现延迟加载(懒加载),需要自己手动 ...