【问题标题】:LibGDX - TexturePacker2 doesn't generate/pack imagesLibGDX - TexturePacker2 不生成/打包图像
【发布时间】:2017-12-21 00:26:18
【问题描述】:

我目前正在阅读一本关于 LibGDX 游戏开发的书 - Learning LigbGDX Game Development。 在本书中,我们使用 TexturePacker2 生成一个 .png 和 .pack 文件,将六个纹理打包成一个纹理图集。我完全遵循了代码,但它不会在目标文件夹中生成任何内容。 这是我的桌面项目文件夹中的代码:

package com.packtpub.libgdx.canyonbunny;

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.badlogic.gdx.tools.imagepacker.TexturePacker2;
import com.badlogic.gdx.tools.imagepacker.TexturePacker2.Settings;

public class Main {
    private static boolean rebuildAtlas = true;
    private static boolean drawDebugOutline = false;

    public static void main (String[] args) {
        if (rebuildAtlas) {
            Settings settings = new Settings();
            settings.maxWidth = 1024;
            settings.maxHeight = 1024;
            settings.debug = drawDebugOutline;
            TexturePacker2.process(settings, "assets-raw/images", "../CanyonBunny-android/assets/images", "canyonbunny.pack");
            TexturePacker2.process(settings, "assets-raw/images-ui", "../CanyonBunny-android/assets/images", "canyonbunny-ui.pack");
            rebuildAtlas = false;
        }

        LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
        cfg.title = "CanyonBunny";
        cfg.useGL20 = false;
        cfg.width = 800;
        cfg.height = 480;

        new LwjglApplication(new CanyonBunnyMain(), cfg);
    }
}

但是当我运行它时,我的 CanyonBunny-android/assets/images 文件夹中没有生成任何内容。我可以加载纹理的唯一方法是下载本书的源代码并将已经生成的 .png 和 .pack 文件夹放在正确的文件夹中。我完全按照这本书,所以我不确定问题是什么。我收到日志消息,它正在生成 1024x1024 纹理图集,因此正在执行代码。我有什么遗漏吗?

这是我启动应用程序时控制台显示的内容(使用已生成的文件)

Packing.........
Writing 1024x1024: ../CanyonBunny-android/assets/images/canyonbunny.png
Packing......
Writing 1024x1024: ../CanyonBunny-android/assets/images/canyonbunny-ui.png
game.Assets: # of assets loaded: 2
game.Assets: asset: images/canyonbunny.pack
game.Assets: asset: images/canyonbunny.png

没有已经生成的文件:

Packing.........
Writing 1024x1024: ../CanyonBunny-android/assets/images/canyonbunny.png
Packing......
Writing 1024x1024: ../CanyonBunny-android/assets/images/canyonbunny-ui.png
game.Assets: Couldn't load asset 'images/canyonbunny.pack'
com.badlogic.gdx.utils.GdxRuntimeException: File not found: images/canyonbunny.pack (Internal)
    at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:127)
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:97)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:59)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:34)
    at com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader(AssetLoadingTask.java:103)
    at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:92)
    at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:399)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:314)
    at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:337)
    at game.Assets.init(Assets.java:38)
    at com.packtpub.libgdx.canyonbunny.CanyonBunnyMain.create(CanyonBunnyMain.java:17)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:125)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)
game.Assets: # of assets loaded: 0
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: java.lang.NullPointerException
    at com.badlogic.gdx.utils.ObjectMap.get(ObjectMap.java:278)
    at com.badlogic.gdx.assets.AssetManager.get(AssetManager.java:103)
    at game.Assets.init(Assets.java:45)
    at com.packtpub.libgdx.canyonbunny.CanyonBunnyMain.create(CanyonBunnyMain.java:17)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:125)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)

【问题讨论】:

  • 也可以发布你的导入声明
  • 当然。 Eclipse 刚刚崩溃。当我不使用预生成的纹理时,也尝试获取日志。编辑:添加进口
  • 图像包在android项目的assets文件夹中生成。确保输入路径中的图像存在,然后尝试刷新文件资源管理器:) 章节数是多少?
  • 刷新了,还是不行。 :( 我们首先在第 4 章中使用纹理打包器来处理游戏纹理,例如角色和硬币。现在我在第 7 章中将它用于菜单。文件的位置应该没问题,因为当我把已经生成的文件在那里,它的工作原理。

标签: java android libgdx


【解决方案1】:
  • 使用文件资源管理器(不是 Eclipse)检查文件是否实际创建在正确的文件夹中。
    如果找不到,请先尝试搜索并使其出现在正确的文件夹中。

    日志表明正在生成文件,我想应该是。

  • 但是,eclipse 无法识别新生成的文件。在使用它们之前,您必须在 eclipse 项目文件夹中点击刷新。
    首先检查它是否有效。

  • 现在您将无法在每次运行时打包它们。我遇到了同样的问题,所以我创建了一个不同的项目(用作工具)来打包(并自动化许多其他小事情)。每当我更改资产时,我都会在测试前运行该工具一次。

希望这会有所帮助。
祝你好运。

【讨论】:

  • 谢谢。我刚刚检查了我的工作空间,出于某种奇怪的原因,我的 android 项目不在那个文件夹中。我不知道它在哪里。我会找到它,然后将其移动到工作区,然后尝试这些建议。
  • 好吧,在我的目标文件夹中找不到这些文件。这让我觉得路径可能是错误的。虽然我检查过,一切都很好......
  • 尝试给出方法调用的绝对路径
  • 那行得通。奇怪的。我必须为每个文件使用绝对路径。甚至我以前运行良好的关卡图像也需要一个绝对目录。不过谢谢。现在它起作用了。 :D 使用绝对目录有什么主要缺点吗?我知道移动工作空间将是一个问题。将其开源可能会导致一些混乱。
  • 尝试使其在外部可配置,例如来自 config.properties 文件。这应该足够好了。如果您可以通过其他方式获取当前路径并将其提供给此函数,那也应该有效。现在在一个新问题中询问有关通过另一种方法获取该路径的问题。我会在那里回答你:P 祝你好运。
【解决方案2】:

看起来您使用的是旧版本的 libgdx — 对吧? TexturePacker2 不存在了,现在只有TexturePacker (顺便说一句,它完美地工作)。我建议你先更新。

【讨论】:

  • 是的。 0.9.7。本书“强烈推荐”使用此版本作书。我计划为我自己的任何项目更新到最新版本。
  • @user2082169 在这种不断发展的主题上使用“真实书籍”可能会很痛苦。我怀疑,你最好依靠一般的Java(和编程)技能,开发游戏的一般“科学”,OpenGL的东西和官方的libgdx wiki(它有一些不完整的地方,但是你可以阅读它的源代码,它非常好可读)
  • hm,OpenGL 也是个有趣的东西,大多数关于 OpenGL 的书籍尽管年代久远(仍然使用即时模式渲染——glBegin/glEnd,...)
  • 是的,我只是使用书籍来帮助我入门,然后计划使用官方资源、文档等。实际上我刚刚完成了一本关于 OpenGL ES 2.0 的书,名为 Learning OpenGL ES 2.0 for Android:快速入门指南。其实很不错的书。也相当新。
  • "TexturePacker 类型已弃用" 更新并得到了这个。 :) 现在有新的方法吗?
【解决方案3】:

我遇到了同样的问题。它与 drawDebugOutline = true 一起工作,但是当我将其更改为 false 时它崩溃了。

这是一个 Eclipse 的东西......

上面提示的解决方案是刷新项目。在您刷新之前,Eclipse 不会看到新的打包纹理文件。右键单击 Android 项目并单击“刷新”,这将导致 Eclipse 找到新文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2021-04-10
    • 2012-09-17
    • 2014-12-23
    • 2019-01-03
    • 2011-06-15
    • 2010-11-19
    相关资源
    最近更新 更多