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

简介:

最近想做个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文件,感觉切成小图再重新拼合挺麻烦的,就尝试修正这个工具:

image

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

image

我真不知道这操蛋的窗口建起来是搞毛用的,里面屁也不执行,还是死活都会报错,娘的,这是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:

SNAGHTML1f2bb657

SNAGHTML1f2cbb27

注意入口选择Main类。

 

修正好之后的测试环境:

image

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

image

命令行执行:

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

SNAGHTML1f30d2bc

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

image

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

 

image

修正后的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,如需转载请自行联系原作者


相关文章
|
4月前
|
安全 Java 数据安全/隐私保护
推荐一款加密工具: 加密jar包+设置机器码+使用demo
推荐一款加密工具: 加密jar包+设置机器码+使用demo
188 0
|
4月前
|
Java Maven
maven管理工具使用package打包的时候无法将lib文件夹下的第三方jar包打入,上线打jar包后运行异常问题
maven管理工具使用package打包的时候无法将lib文件夹下的第三方jar包打入,上线打jar包后运行异常问题
|
4月前
|
XML Arthas Java
Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启
Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启
105 0
|
4月前
|
Java
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
130 0
|
4月前
|
Java Maven
【解决】maven管理工具使用package打包的时候无法将lib文件夹下的第三方jar包打入,上线打jar包后运行异常问题...
【解决】maven管理工具使用package打包的时候无法将lib文件夹下的第三方jar包打入,上线打jar包后运行异常问题...
|
6月前
|
存储 JavaScript Java
【已开源】针对 jar 和 vue 一键自动化部署工具,界面好,操作简单!
easy-jenkins是一款对vue和jar的部署工具,操作简单,实行一键部署,内部结构采用流水线形式架构,每次部署,时时提供部署过程,部署记录,界面友好简洁,使用方便,符合用户常规操作
|
9月前
|
XML 监控 Java
部署jar包windows服务工具
某个周末一个线上项目因为服务器自动重启导致了系统挂了,我们是通过jenkins部署的jar包所以需要手动重启项目,解决问题后准备调换部署方式让项目随系统自动启动,试用tomcat后发现启动慢,并且日常开发springboot都是使用内置tomcat启动,如果要保持和部署方式保持一致(避免本地代码执行和部署方式不一致导致的bug),需要配置外部tomcat比较麻烦,所以决定还是以java -jar命令方式启动并注册为window服务
104 0
|
10月前
|
Java 开发工具 Android开发
Android dx工具(jar包转成dex格式二进制jar包工具)
Android dx工具(jar包转成dex格式二进制jar包工具)
606 0
|
安全 Java 开发者
【笔记17】使用 jad 工具把 java 的 class 文件转换为 java 文件;使用 luyten 把 java 的 jar 包转换为 java文件
📃 我的代码被存放在公司的电脑上 📃 疫情原因使得我只能在家办公 📃 而公司已经被隔离了😂 (怕公司的电脑感染新冠病毒) 📃 我无法在公司代码的基础上继续编写代码 📃 我有两种选择:① 重新编写代码;② 跑路 📃 但是我选择了第三个选项:把 Java 项目打包后的 jar 文件转换为打包之前的 java 文件 📃 在这里我推荐两款工具,这两款工具都可以把 class 文件转换为 java 文件 🌼 ① jad 工具:可把 class 文件转换为 java 文件 【本文章的前四节是介绍 jad 工具的使用】 🌼 ② Luyten 工具:可把 jar 包转换为 java 文件
451 0
【笔记17】使用 jad 工具把 java 的 class 文件转换为 java 文件;使用 luyten 把 java 的 jar 包转换为 java文件
|
12月前
|
存储 JavaScript 前端开发
针对 jar 和 vue 的一键自动化部署工具,界面友好,操作简单(已开源)2
针对 jar 和 vue 的一键自动化部署工具,界面友好,操作简单(已开源)2