我会在这里发布我的解决方案以及我在Libgdx中尝试过的关于这个问题的内容。
--
T1. 制作原始精灵表(没有图集文件),将其填充到2。
A1. 如果要重新打包没有图集的精灵表,这是不可能的,即使你找到了一个切片/分割工具,它也应该是一堆需要适当重新打包为TiledMap(.tmx)的图像。
A1(更新)。 @Nine Magics 提供的脚本是最好的方法!(我将其用作我的最终解决方案)
--
T2. 使用由libgdx-nighty或gdx-toolg提供的TiledMapPacker
。 批处理代码应为:
java -classpath "gdx.jar";"gdx-natives.jar";"gdx-backend-lwjgl.jar";"gdx-backend-lwjgl-natives.jar";"gdx-tiled-preprocessor.jar";"extensions/gdx-tools/gdx-tools.jar" com.badlogic.gdx.tiledmappacker.TiledMapPacker "PathToYourProject\android\assets\RawMap" "PathToYourProject\android\assets\Map" --strip-unused
A2. 如果你使用复杂的文件夹路径来分类你的 .png
文件,那么生成的 .tmx 输出可能无法被 Tiled 读取。而且该输出文件可能会由于 AtlasTmxMapLoader
加载失败。
--
T3. 相机位置校正,将相机位置变为整数。代码类似于@Julian或@strangecat在libgdx tiledmap flicker with Nearest filtering中的代码。
A3. 我使用这个解决方案没有问题,并且发布了我的代码与他们不同。
float cameraX = (int)(mainCamera.position.x * Game.PPM_X) / Game.PPM_X
float cameraY = (int)(mainCamera.position.y * Game.PPM_X) / Game.PPM_X
float cameraZ = mainCamera.position.z
mainCamera.position.set(cameraX, cameraY, cameraZ)
同时使用TmxMapLoader.Parameters
进行加载
TmxMapLoader.Parameters params = new TmxMapLoader.Parameters()
params.textureMinFilter = Texture.TextureFilter.Linear
params.textureMagFilter = Texture.TextureFilter.Nearest
params.generateMipMaps = true
assetManager.load(TILED_MAP_SETS.FIRST_MAP, TiledMap.class, params)
如果您使用了PPM并且想要逐像素移动,您可以使用此整数校正来进行游戏,如果没有,您可以将位置转换为整数。
我几乎浪费了一整天的时间来解决这个问题,希望这些调查能够帮助每一个游戏开发者 :)
编辑(2018/04/21)
我发现Unity也有同样的问题,但我还没有测试Libgdx是否默认具有2x抗锯齿设置。Libgdx可能会通过关闭抗锯齿来修复此问题,就像Unity一样。
pack.json
文件代替Settings
类 - LibGDX 纹理打包文档。 - Genhis