美文网首页
LibGDX 游戏开发 之 瓦片地图 Tile maps

LibGDX 游戏开发 之 瓦片地图 Tile maps

作者: imagefancy | 来源:发表于2017-10-22 21:36 被阅读0次

    原文链接:https://github.com/libgdx/libgdx/wiki/Tile-maps

    译者:重庆好爸爸 game4kids@163.com
    谢绝转载

    术语对照

    • 瓦片地图 - Tile Maps
    • 基类 - Base Classes

    文章中提到的类

    • MapProperties
    • TiledMap
    • TiledMapTileLayer
    • TiledMapTile
    • TiledMapTileSet

    瓦片地图

    地图

    LibGDX具有通用的地图API。所有与地图相关的类可以在com.badlogic.gdx.maps包中找到。com.badlogic.gdx.maps包含了基类,其下的子包包含了tile地图的其他类型地图的实现。

    基类

    基类,意味着是一个通用的集合,除了Tiled地图外,也支持其他2D地图格式。
    地图由一系统图层组成。每个图层包含了一系统对象。地图,图层,对象都有属性,属性取决于加载方式。对于某些格式,还有专门的地图,图层和对象实现,稍后会有更多的内容。 基类的类层次结构如下所示:

    image

    “Tiled”是一个通用的瓦片地图编辑器,可运行在windows/Linux/MAC OS X上,可以用来创建Tile图层和Object图层,包含用来触发区域的任意形状和其他目的。LibGGX提供一个加载器,可以用来读取“Tiled”生成的文件。

    有两个方法可以加载瓦片地图:直接加载或者通过AssetManager。直接加载如下:

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

    这将会从assets文件夹加载这个叫做level1.tmx的文件。如果你想加载另外的文件类型,你必须在TmxMapLoader的构造其中提供一个FileHandleResolver。

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

    我们选择这种机制,因为TmpMapLoader也可以用和AssetManager类一起使用,FileHandleResolvers统计了地址。通过AssetManager加载TMP地图的方法如下:

    // only needed once
    assetManager.setLoader(TiledMap.class, new TmxMapLoader(new InternalFileHandleResolver()));
    assetManager.load("level1.tmx", TiledMap.class);
    
    // once the asset manager is done loading
    TiledMap map = assetManager.get("level1.tmx");
    

    加载后,你可以把这个地图当成一个新的TiledMap.

    注意:如果你通过“直接加载”的方式加载了TMX地图,你需要调用TiledMap#dispose()去释放。这个函数也会释放地图中所有加载的的textures.
    注意:如果你想把TMX地图和GWT backend结合使用,你需要保证地图使用pure base64编码。由于GWT的限制,GWT不能使用压缩的TMX格式。

    加载 Tide地图

    image

    “Tide” 是另外一个通过用的瓦片地图编辑器,只能适用于windows平台。(译者注:考虑程序员用MAC的较多,因此不推荐使用"Tide"). LibGDX也提供了支持Tide工具输出的加载器。

    和TMX文件一样,你可以直接加载“Tide”文件或者通过AssetManager加载:

    // direct loading
    map = new TideMapLoader().load("level1.tide");
    
    // asset manager loading
    assetManager.setLoader(TiledMap.class, new TideMapLoader(new InternalFileHandleResolver()));
    assetManager.load("level1.tide", TiledMap.class);
    

    注意:如果你直接加载Tide地图,你需要调用TiledMap#dispose()去释放。这个函数也会释放地图中所有加载的的textures.

    性能考虑 Performance considerations

    我们希望渲染的速度越快越好,有一些东西你可以考虑下,一边加快渲染速度:

    • 仅使用图层中单个图块集中的图块。这将减少纹理绑定。
    • 将不需要混合的图块标记为不透明。 目前您只能以编程方式执行此操作,我们将提供在编辑器中自动执行的方法。
    • 不要超过层数。(Do not go overboard with the number of layers.???)

    几个例子

    相关文章

      网友评论

          本文标题:LibGDX 游戏开发 之 瓦片地图 Tile maps

          本文链接:https://www.haomeiwen.com/subject/asfruxtx.html