使用LibGDX Gdx.files.internal加载.png文件时遇到问题

时间:2013-08-17 01:47:45

标签: java libgdx

我正在尝试将纹理加载到libGDX,而我收到的文件未找到异常。

这是尝试加载.png文件的代码。

//Textures
private Texture tiles;
private TextureRegion grassImage;
private TextureRegion dirtImage;
private TextureRegion stoneImage;

//Entities
private Texture entities;
private TextureRegion playerImage;

public WorldRenderer(World world, boolean debug) {
    this.world = world;
    this.camera = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT);
    this.camera.position.set(CAMERA_WIDTH/2f, CAMERA_HEIGHT/2f, 0);
    this.camera.update();
    this.debug = debug;
    spriteBatch = new SpriteBatch();
    loadTextures();
}

public void loadTextures() {
    tiles = new Texture(Gdx.files.internal("tiles.png"));
    grassImage = new TextureRegion(tiles, 0, 0, 32, 32);
    dirtImage = new TextureRegion(tiles, 0, 64, 32, 32);
    stoneImage = new TextureRegion(tiles, 64, 0, 32, 32);

    entities = new Texture(Gdx.files.internal("entities.png"));
    playerImage = new TextureRegion(entities, 0, 0, 32, 32);
}

public void render() {
    spriteBatch.begin();
    drawGrass();
    drawDirt();
    drawStone();
    drawPlayer();
    spriteBatch.end();
    if (debug) {
        drawDebug();
    }
}

以下是错误消息:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: tiles.png
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
    at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
    at com.badlogic.gdx.graphics.Texture.load(Texture.java:175)
    at com.badlogic.gdx.graphics.Texture.create(Texture.java:159)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:122)
    at com.mr.zen.level.WorldRenderer.loadTextures(WorldRenderer.java:62)
    at com.mr.zen.level.WorldRenderer.<init>(WorldRenderer.java:58)
    at com.mr.zen.screens.GameScreen.show(GameScreen.java:29)
    at com.badlogic.gdx.Game.setScreen(Game.java:62)
    at com.mr.zen.Zen.create(Zen.java:12)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: tiles.png (Internal)
    at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:132)
    at com.badlogic.gdx.files.FileHandle.length(FileHandle.java:586)
    at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:220)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:137)
    ... 12 more

loadTextures()方法中存在问题。找不到文件

 tiles = new Texture(Gdx.files.internal("tiles.png"));

我已确保将.png文件放在android项目文件的assets文件夹中。我不知道造成这种情况的原因;我已经把它用于其他项目,但这次出现了问题。谢谢你的帮助。

7 个答案:

答案 0 :(得分:10)

通过清理项目(Eclipse)解决“无法加载文件”问题

(对于此解决方案,预计图像文件的路径是正确的。)

当我向项目添加新图像时,有时会出现无法加载文件问题。我不知道为什么,但我的桌面版本的LibGDX游戏没有用我的新图像更新文件夹 Mygame-desktop / bin / data (已添加到 Mygame-android / assets / data )项目构建时。 (也就是说,每次保存文件时,Eclipse都会构建项目,因为我设置了选项项目&gt;自动构建。)

它应该工作,因为在LibGDX中,桌面和HTML项目都有一个指向Android项目资产文件夹的链接。所以,我不认为需要手动将我的新图像复制到 Mygame-desktop / bin / data

Eclipse上的解决方案是清理(菜单项目&gt;清理...... )您用于游戏的所有LibGDX项目,然后是 Mygame-android / assets中的文件/ data 将被正确复制到 Mygame-desktop / bin / data

答案 1 :(得分:6)

如果您正在使用Gradle,请在Aassets -> Gradle -> Refresh All.

上的包资源管理器中点击鼠标左键

就是这样=)

答案 2 :(得分:3)

在android项目的assets文件夹中创建新文件夹 data 然后使用 Gdx.files.internal(“data / tiles.png”)

访问该文件

tiles = new Texture(Gdx.files.internal("data/tiles.png"));

答案 3 :(得分:1)

在assets文件夹中创建一个数据文件夹,而不是使用

tiles = new Texture(Gdx.files.internal("tiles.png"));

试试这个:

tiles = new Texture("data/tiles.png");

答案 4 :(得分:0)

在刷新时在Package Explorer中单击鼠标左键或仅按F5。

这解决了我的问题。

答案 5 :(得分:0)

我使用当前的libgdx版本在android studio 2中运行此问题。当我在psp-cs6和/或cs15中保存为png时 - 它无法读取它。我无法回想起确切的错误消息,例如io无法读取流。所以我尝试在corel paint中再次保存它。同样的问题。然后将简单的paint实用程序与windows一起打包。不好。最后我下载了paint.net。现在我的工作流程只需要一个额外的步骤用psp等产生的任何png,几乎任何png libgdx grumps,我加载到paint.net,点击&#34;保存&#34;我很高兴。

本身并不是一个真正的解决方案,但可以完成工作。

看起来你很好,但我希望这有助于那里的人。 马克

答案 6 :(得分:0)

LibGDX可能不支持您的PNG个人资料。

我将它设置为require('dotenv').config(); const express = require('express'); const app = express(); const appPort = process.env.APP_PORT; app.get('/', (req, res) => { var campaign = req.query.campaign; var click = req.query.param1; if (campaign !== undefined && click !== undefined) { res.cookie('campaign', campaign, { maxAge: 86400 * 1000 }); res.cookie('click', click, { maxAge: 86400 * 1000 }); } res.sendFile(__dirname + '/dist/index.html'); }); app.get('/members', (req, res) => res.sendFile(__dirname + '/dist/members.html')); app.post('/members', function (req, res) { res.cookie('firstName', req.body.firstname); res.cookie('email', req.body.email); res.sendFile(__dirname + '/dist/members.html'); }); app.listen(appPort, () => console.log(`App is running on ${appPort} port`)); app.use(express.static('dist')); (与Krita),现在它可以正常工作。

在Krita,请访问:

  

图片&gt;属性&gt;资料