最近想做个Android的游戏,用到libgdx,现在研究地图这块,制作好地图tmx文件后需要处理后libgdx才能载入,需要用到TiledMapPacker工具,该工具被放在gdx-tiled-preprocessor.jar里,这破玩意可愁死我了,一路尝试下来各种各种报错神马的诸如:

Failed to load Main-Class manifest attribute

Exception in thread "main" com.badlogic.gdx.utils.GdxRuntimeException: Creating window failed 
at com.badlogic.gdx.backends.jogl.JoglApplication.<init>(JoglApplication.java:86) 
at com.badlogic.gdx.tiledmappacker.TiledMapPacker.main(TiledMapPacker.java:329) 
at com.skyd.tiledmappacker.TiledMapPackerTool.main(TiledMapPackerTool.java:15) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.awt.EventQueue.invokeAndWait(Unknown Source) 
at javax.swing.SwingUtilities.invokeAndWait(Unknown Source) 
at com.badlogic.gdx.backends.jogl.JoglApplication.<init>(JoglApplication.java:80) 
... 2 more 
Caused by: java.lang.UnsatisfiedLinkError: no gdx64 in java.library.path 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at com.badlogic.gdx.utils.GdxNativesLoader.load(GdxNativesLoader.java:118) 
at com.badlogic.gdx.backends.jogl.JoglNativesLoader.load(JoglNativesLoader.java:29) 
at com.badlogic.gdx.backends.jogl.JoglApplication.initialize(JoglApplication.java:111) 
at com.badlogic.gdx.backends.jogl.JoglApplication$1.run(JoglApplication.java:82) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source)

Exception in thread "main" java.lang.NullPointerException 
at com.badlogic.gdx.tiledmappacker.TiledMapPacker.processMap(TiledMapPac 
ker.java:92) 
at com.skyd.tiledmappacker.Main.main(Main.java:38)

到最后看网上别人也无解,说这玩意全是错误,都是用单独的图块文件通过TexturePacker拼起来后得到整图及packfile文件,然后再拿进地图编辑器编辑以输出tmx文件,感觉切成小图再重新拼合挺麻烦的,就尝试修正这个工具:

我新建了这个项目,引入了相关的jar和gdx-tiled-preprocessor.jar的源码,在新建的Main类中的主函数里仿照原先TiledMapPacker类的主函数的调用方式调用TiledMapPacker类的功能,但是去掉了新建窗口的那部分代码:

我真不知道这操蛋的窗口建起来是搞毛用的,里面屁也不执行,还是死活都会报错,娘的,这是Main类的代码:

package com.skyd.tiledmappacker;
import java.io.File;
import java.io.IOException;
import com.badlogic.gdx.tiledmappacker.TiledMapPacker;
import com.badlogic.gdx.tools.imagepacker.TexturePacker.Settings;
public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        File tmxFile, inputDir, outputDir;
        Settings settings = new Settings();
        // Note: the settings below are now default...
        settings.padding = 2;
        settings.duplicatePadding = true;

        TiledMapPacker packer = new TiledMapPacker();
        if (args.length != 2) {
            System.out.println("Usage: INPUTDIR OUTPUTDIR");
            System.exit(0);
        }
        inputDir = new File(args[0]);
        outputDir = new File(args[1]);

        System.out.println("待处理目录:"+inputDir+" "+inputDir.getAbsolutePath());
        System.out.println("待处理目录:"+outputDir+" "+outputDir.getAbsolutePath());
        if (!inputDir.exists()) {
            throw new RuntimeException("Input directory does not exist");
        }
        try {
            packer.processMap(inputDir, outputDir, settings);
        } catch (IOException e) {
            throw new RuntimeException("Error processing map: " + e.getMessage());
        }
    }
}

修好了窗口问题,执行起来还是有BUG,执行到TiledMapPacker类的processMap方法里就会报错,要修改其源码,将其中创建FileHandle的方式全部由“Gdx.files.absolute(XXX.getAbsolutePath())”改为“new FileHandle(XXX.getAbsolutePath())”形式,改好后的代码:

   public void processMap (File inputDir, File outputDir, Settings settings) throws IOException {
        FileHandle inputDirHandle = new FileHandle(inputDir.getAbsolutePath());
        File[] files = inputDir.listFiles(new TmxFilter());
        for (File file : files) {
            System.out.println("待处理文件:"+file+" "+file.getAbsolutePath());
            map = TiledLoader.createMap(new FileHandle(file.getAbsolutePath()));
            for (TileSet set : map.tileSets) {
                if (!processedTileSets.contains(set.imageName)) {
                    processedTileSets.add(set.imageName);
                    packTileSet(set, inputDirHandle, outputDir, settings);
                }
            }
            writeUpdatedTMX(outputDir, map.tmxFile);
        }
    }

然后导出为Runnable JAR file:

注意入口选择Main类。

修正好之后的测试环境:

在in目录里放置素材图片和地图编辑器生成的tmx文件:

命令行执行:

D:\test>java -jar TiledMapPacker.jar in out

out目录将得到处理后的文件:

至此就搞定了,可以在libgdx里进行渲染了。

修正后的TiledMapPacker.jar下载:http://vdisk.weibo.com/s/4jXW0

参考文档:

http://www.cnblogs.com/htynkn/archive/2012/01/12/libgdx_12.html

http://blog.csdn.net/cng1991/article/details/7288234

https://code.google.com/p/libgdx/wiki/TiledMaps

http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/

本文转自斯克迪亚博客园博客,原文链接:http://www.cnblogs.com/SkyD/archive/2012/04/19/2457237.html,如需转载请自行联系原作者

libgdx的tmx地图处理工具gdx-tiled-preprocessor.jar(TiledMapPacker)修正版相关推荐

  1. LibGdx框架 之 tmx地图文件属性基本操作

    Libgdx 相关API介绍 1.com.badlogic.gdx.maps.Map implements Disposable Map代表了我们用地图编辑器编辑完之后的TMX文件,实际上是其子类Ti ...

  2. Tiled有java版本吗_【Cocos2d-X开发学习笔记】开发工具之Tiled地图编辑器的使用

    Cocos2D-X支持Tiled地图编辑器生成的地图数据文件.Tiled地图编辑器是一个以广泛使用为目标的地图编辑html 器,它使用简单而且能够轻松地在不一样的引擎中使用.目前最新版本使用Qt框架进 ...

  3. libGDX学习之路02:利用Tiled绘制游戏地图

    简介 开始做游戏之后,我们免不了得先画一个游戏地图出来,可是这个地图怎么做呢.libGDX官方也给我们推荐了一个2D地图制作工具--Tiled 贴上官网 Tiled | Flexible level ...

  4. libgdx, couldn't load shared library 'gdx' for target: Linux, 32-bit的终极解决方案

    说在前面的话 今天在下载spine-libgdx的spine-libgdx-tests运行时,报了一个"libgdx, couldn't load shared library 'gdx' ...

  5. (译)TMX地图格式

    http://www.cnblogs.com/FireStudio/archive/2012/06/04/2534251.html 原文地址:https://github.com/bjorn/tile ...

  6. wms地图绘制工具_【工具】奇幻风世界地图绘制工具Inkarnate

    首先放出官方网站 https://inkarnate.com/​inkarnate.com 加载完网页之后点击这里的Beta Sign Up注册,之后Worlds Log In就可以登入了. 这里有两 ...

  7. matlab中minigrid,[转载][转载]matlab画地图的工具:worldmap和m_map

    matlab画地图的工具:worldmap和m_map *用MATLAB画世界地图并加散点 clear;clc; worldmap([-55 -30],[-110 -60]); h1=axesm('M ...

  8. 分享一个网站地图生成工具

    为什么分享这个网站地图生成工具?因为除了懂开发的大牛们,还有很多想我们这样的普通SEO工作者,使用现成的工具更符合现实. 最近发现的这个网站地图生成工具生成的页面比较全面,没有做更多的限制,也许还在内 ...

  9. 推荐一个网站地图生成工具

    开WEB视界sitemap网站地图生成工具(http://sitemap.webkk.net),按照页面说明,很方便的就生成了全站的网站地图. 生成地图之后,你需要做的是,向百度或者其他搜索引擎提交你 ...

最新文章

  1. R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)
  2. python数据库编程 代码 源码_Python可以这样学_Python教程
  3. Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器
  4. tableau中的那些快捷键,让你的操作更顺滑
  5. 零基础该如何高效学Java?
  6. 使用Google Weather API查询天气预报
  7. arima模型 p q d 确定_自回归移动平均模型(ARMA)
  8. 跳槽和求职 ,10条掏心建议
  9. CentOS 6.4 64位系统U盘安装
  10. arm64入栈出栈_【iOS内功】ARM黑魔法—栈桢的入栈和出栈
  11. 《云云众声》第101期:众家发声 追求“中国特色”
  12. 六西格玛绿带考试模拟试卷--多选题|优思学院
  13. xlsxwriter
  14. 想要学习C++,就必须要学习C语言吗?
  15. 二次bootloader关于boot28.asm应用的注意事项,28035的
  16. 10年计算机速度慢加固态硬盘行不行,给超过十年的老笔记本电脑换固态值不值?试过发现还不错...
  17. 源码:Mybatis的LogFactory生成逻辑
  18. 设计1-腾讯设计导航
  19. Java 学习API(一)
  20. dom4j解析xml,dom4j创建xml

热门文章

  1. layui添加复选框_layui table的复选框 重载后增加回显
  2. 三菱FX5u跟FX3U的优点
  3. 微信小程序的语音通讯,通话能力
  4. 【解决方案】AI视频智能分析安防监控平台EasyCVR在汽车销售门店/4s店的实际应用
  5. 光模块的发射(TOSA)和接收(ROSA)器件解析
  6. 分布式架构——HTTP 协议(一)
  7. 【商品架构day1】O2O行业怎么做商品系统——与一手带大的系统说句再见
  8. 腾讯云服务器CVM和轻量服务器区别十大不同点!
  9. 大一下期末javaGUI课设之swing+MYSQL实现“弹珠传说”弹球小游戏
  10. Centos7.5搭建本地Yum源【2022最新--保姆级部署】