libgdx -- Gdx.files.internal(); --> 文件未找到。

11

我一直在使用libgdx的Gdx.files.internal()时遇到了麻烦;似乎每次我将其作为桌面应用程序运行时都会出现以下主要错误:

 

Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found:   \data\sounds\music\mainmusic.mp3 (Internal)   at   com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136)   at   com.badlogic.gdx.backends.lwjgl.audio.Mp3$Music.(Mp3.java:42)     ... 10 more

我已经阅读了5个不同的帖子,其中一个看起来是最有可能的问题,所以我尝试过...

  1. 在assets下创建一个data文件夹
  2. 刷新Eclipse资源管理器
  3. Project > clean
  4. 在bin(在core中)手动创建一个assets/data文件夹
  5. 三倍检查文件路径
  6. 重启IDE

完整路径为: /Flipcrew Legends-desktop/assets/data/sounds/music/mainmusic.mp3

public class SplashScreen implements Screen{

final FlipcrewLegends game;

Texture splashTexture;
Sprite splashSprite;
SpriteBatch batch;
TweenManager manager;
Music introMusic;

public SplashScreen(FlipcrewLegends game) {
    this.game = game;

    introMusic = Gdx.audio.newMusic(Gdx.files.internal("data/sounds/music/mainmusic.mp3"));
    introMusic.setLooping(true);

}

然而,这个方法似乎正在起作用...

@Override
public void show() {

    splashTexture = new Texture("data/images/main/splash.png");
    splashTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

    splashSprite = new Sprite(splashTexture);
    splashSprite.setColor(1, 1, 1, 0);
}

路径: /Flipcrew Legends-desktop/assets/data/images/main/splash.png

// 因为 Gdx.audio.newMusic 没有直接的字符串路径方法,所以我无法尝试它

附加信息: -> 我已经尝试将核心文件夹中的资产文件夹复制到桌面文件夹中,但没有成功(删除后) -> 有一个帖子说libgdx通常从android文件夹中获取数据,然后应用于桌面(不幸的是,我只有桌面,没有android),但我猜测自那篇文章发布以来,libgdx已经夜间更新,也许已经添加了替代方案?

编辑:

  1. 刚才将 assets/data/etc.... 还原为 assets/etc.... 后, 即使是 new Texture(path); 也出现了同样的错误 - 仍然不能工作... 重新尝试上述方法,在发布后重新启动计算机,可能是编译问题。

  2. 重新启动电脑,没有任何区别

4个回答

5

尝试通过进入项目->清理来“清理”您的项目。同时,右键单击并使用Gradle->全部刷新来“刷新”您的libGDX桌面文件夹。

libGDX使用链接文件夹。您只需要将文件复制到其中一个资产文件夹中(在eclipse中执行此操作,而不是在文件资源管理器中执行)。


我为我的游戏实现了国际化(i18n),但无法加载某个文件。这种方式看起来很奇怪,但实际上有效(笑)。 - Tokenyet

2

对我有效的方法是,我必须进入 assets->Build Path -> Configure Inclusion/Exclusion。我需要将所有需要的文件夹和文件添加到包含部分。


1

由于有人已经回答了原始问题,所以这个答案是针对LibGDX之外的情况。该答案可能有助于处理LibGDX之外的文件相关工作。

假设:

存在以下包... Apple, Orange, Grape。尝试使用相对路径。

  1. Apple包含文件Temp1.txt。
  2. Orange包含文件Temp2.txt。
  3. Grape包含文件Temp3.txt。

以以下格式访问文件...

  • "/Apple/Temp1.txt"
  • "/Orange/Temp2.txt"
  • "/Grape/Temp3.txt"

这很奇怪,但是在开头没有“/”的情况下,FileHandle.list()会包括一些很久以前删除的文件,可能来自某个缓存,并且重建项目或使缓存无效并没有帮助 - 但只有在某些设备上。然后再次添加“/”可能只是使其他缓存失效了。 - comodoro

0

我在Android Studio上也遇到了同样的问题。我为每个资源都应用了直接路径。

"C:\Users\Admin\Desktop\test1\android\assets/starfish.png"

enter public void create()
    {
        batch = new SpriteBatch();
        turtleTexture = new Texture( Gdx.files.internal("C:\\Users\\Admin\\Desktop\\test1\\android\\assets/starfish.png") );
        turtleX = 20;
        turtleY = 20;
        turtleRectangle = new Rectangle( turtleX, turtleY,
                turtleTexture.getWidth(), turtleTexture.getHeight() );
        starfishTexture = new Texture( Gdx.files.internal("C:\\Users\\Admin\\Desktop\\test1\\android\\assets/starfish.png") );
        starfishX = 380;
        starfishY = 380;
        starfishRectangle = new Rectangle( starfishX, starfishY,
                starfishTexture.getWidth(), starfishTexture.getHeight() );
        oceanTexture = new Texture( Gdx.files.internal("C:\\Users\\Admin\\Desktop\\test1\\android\\assets/water.jpg") );
        winMessageTexture = new Texture( Gdx.files.internal("C:\\Users\\Admin\\Desktop\\test1\\android\\assets/you-win.png") );
        win = false;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接