Libgdx专题系列:地图篇 地图的绘制

来源:互联网 发布:乔任梁网络暴力议论文 编辑:程序博客网 时间:2024/06/07 01:51

声明:

本系列文章使用的Libgdx版本均为0.99版本

Libgdx游戏开发交流群 323876830

 

 

本篇,我们将开启地图绘制部分, 包含垂直视角,45°视角地图的绘制,地图的移动,放缩等等。

 

Libgdx包含了许多关于地图绘制的Api,com.badlogic.gdx.maps在这个包中都可以找到。

下面介绍一下有关地图方面的关键信息

 

Properties属性信息

地图的,图层的和对象的属性都是放在一个叫做MapProperties的对象中, 他其实是一个hash表,以键值对的形式存在,

类似于

map.getProperties().get("custom-property", String.class);layer.getProperties().get("another-property", Float.class);object.getProperties().get("foo", Boolean.class);

 

地图图层

可以根据索引或者是名称来取得一个图层

MapLayer layer = map.getLayers().get(0);MapLayer layer = map.getLayers().get("my-layer");

图层的信息也可以获取到

String name = layer.getName();float opacity = layer.getOpacity();boolean isVisible = layer.isVisible();


地图对象

MapObjects objects = layer.getObjects();

可以取得指定图层的对象列表

还有一些属性信息

String name = object.getName();float opacity = object.getOpacity();boolean isVisible = object.isVisible();Color color = object.getColor();


地图绘制器

MapRenderer,他允许我们绘制地图中的图层,对象。

在我们绘制之间,我们需要设置一下镜头或者矩阵信息

mapRenderer.setView(camera);

或者

mapRenderer.setView(projectionMatrix, startX, startY, endx, endY);

绘制的话,可以简单的这样

mapRenderer.render();

也可以自己控制,绘制哪一层,或者夹杂着其他对象绘制

int[] backgroundLayers = { 0, 1 }; // don't allocate every frame!int[] foregroundLayers = { 2 };    // don't allocate every frame!mapRenderer.render(backgroundLayers);renderMyCustomSprites();mapRenderer.render(foregroundLayers);


在Libgdx提供的地图工具中, Tiled 和 Tide编辑器是比较好的支持的,尤其是Tiled编辑器。下面我们重点

使用Tiled编辑器来开始我们的地图学习之旅。

 

我们在Tiled中来编辑我们的地图,导出为tmx格式。

在程序中使用TmxMapLoader来导入文件生成TiledMap对象

TiledMap map = new TmxMapLoader().load("micro.tmx");

 

调整镜头大小

mCamera = new OrthographicCamera(800, 480);

 

根据地图信息生成一个正投射图块地图绘制对象

mMapRenderer = new OrthogonalTiledMapRenderer(map);

这里要注意下,在opengl中没有像素的概念的, 都是1个单位,具体这个单位包含多少像素

,这个需要我们来设定,就是一个比例,默认是1个像素一个单位。

public OrthogonalTiledMapRenderer(TiledMap map, float unitScale)

上面这个是可以设置像素比的。

 

设置镜头的宽和高的单位

mCamera.setToOrtho(false, 800, 480);

上面这个800和480是以单位来计算的。 因为这里设置了1个单位=1像素, 所以值恰好一致。

 

在render中

镜头更新

mCamera.update();

设置镜头

mMapRenderer.setView(mCamera);

下面就是绘制了, 这里把所有的都绘制了
mMapRenderer.render();

 

下面是例子的截图

 


项目下载地址

 

转载请链接原文地址 http://blog.csdn.net/wu928320442/article/details/17225695

原创粉丝点击