繁体   English   中英

libgdx加载地图集文件时出错

[英]Libgdx error loading atlas file

我已经开始在Libgdx中开发游戏,并且开始从事某些工作。 我有一个background.png试图从我的皮肤加载。 我试图将gameskin.atlas加载到我的AssetManager对象中,但是每次尝试加载它时,都会收到错误消息:

Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing file: packs/gameskin.atlas
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:77)
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:692)
    ... 14 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing JSON on line 3 near: 
gameskin.png
*ERROR*format: RGBA8888
filter: Nearest,Nearest
repeat: none
footballpi
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:549)
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:55)
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:75)
    ... 15 more

这是我尝试加载的地方:

package screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;

import engine.Values;


public class GameScreen extends ScreenWrapper{

    private final String GAME_SKIN_PATH = "packs/gameskin.atlas";
    private ScreenRenderer renderer;
    public GameScreen(ScreenManager manager) {
        super(manager);
    }

    @Override
    public void initiate() {
        manager.getLoader().load(GAME_SKIN_PATH, Skin.class);
    }

    @Override
    public void buildStage() {
        Skin skin = manager.getLoader().getAsset(GAME_SKIN_PATH, Skin.class);
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(242/255f, 242/255f, 242/255f, 0);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        super.render(delta);
    }

    @Override
    public void dispose() {
        manager.getLoader().unload(GAME_SKIN_PATH);
    }

}

我试图删除gameskin.atlas文件中的size参数,但这不是问题。 可能是什么问题呢?

编辑:我试图使用AssetDescriptors和SkinParameter解决此问题。 现在,它发出此错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Error reading pack file: packs/gameskin.atlas
    at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:570)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:375)
    at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:396)
    at engine.utils.AssetsLoader.load(AssetsLoader.java:41)
    at screens.GameScreen.initiate(GameScreen.java:21)
    at screens.ScreenManager.pushScreen(ScreenManager.java:21)
    at engine.TapTapMain.create(TapTapMain.java:27)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error reading pack file: packs/gameskin.atlas
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:187)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:58)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:34)
    at com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader(AssetLoadingTask.java:99)
    at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:88)
    at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:498)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:373)
    ... 7 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Invalid line: 
    at com.badlogic.gdx.graphics.g2d.TextureAtlas.readTuple(TextureAtlas.java:443)
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:115)
    ... 13 more

这是我现在的GameScreen:

package screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;

import engine.Values;
import engine.utils.AssetsLoader;


public class GameScreen extends ScreenWrapper{

    private ScreenRenderer renderer;
    // The constructor gets the ScreenManager to notify on screen transitions
    public GameScreen(ScreenManager manager) {
        super(manager);
    }

    @Override
    public void initiate() {
        manager.getLoader().load(AssetsLoader.SKIN_GAME);
    }

    @Override
    public void buildStage() {
        Skin skin = manager.getLoader().findAsset(AssetsLoader.SKIN_GAME);
        Image backgroundPitch = new Image(skin.getDrawable("football_pitch"));
        backgroundPitch.setSize(Values.WIDTH, Values.HEIGHT);
        renderer.addActor(backgroundPitch);
        addActor(renderer);
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(242/255f, 242/255f, 242/255f, 0);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        super.render(delta);
    }

    @Override
    public void dispose() {
        manager.getLoader().unload(Values.GAME_SKIN_PATH);
    }

}

您正在尝试将Atlas加载到皮肤中 Atlas是一个文件,其中包含图像的所有打包数据。 Skin包含要与Scene2D元素(例如BitmapFontLabelStyleButtonStyle一起使用的数据。

外观需要json 外观文件和地图集。 要使用AssetManager一次正确加载它,您需要使用SkinLoader.SkinParameter

manager.load("skin.json", Skin.class, new SkinLoader.SkinParameter("image.atlas"));

另外,我更喜欢使用AssetDescriptors在管理器中查找资产。 这些将进入您的经理班级:

//A atlas or texture do not require additional parameters.
public static final AssetDescriptor<TextureAtlas> ATLAS = 
    new AssetDescriptor<TextureAtlas>("image.atlas", TextureAtlas.class);

//A skin does require additional parameters.
public static final AssetDescriptor<Skin> SKIN = 
    new AssetDescriptor<Skin>("skin.json", Skin.class, 
    new SkinLoader.SkinParameter("image.atlas"));

现在,无论何时manager.load(skin)都需要加载manager.load(skin) 当您需要特定资产时,可以在Assets类中静态查找这些描述符,并将其传递给经理manager.find(Assets.SKIN) 首先,当您键入Assets.时,这会为您的所有资产创建一个漂亮的列表Assets. ,其次,由于您已经在AssetDescriptor ,因此无需在分配资产时AssetDescriptor或添加.class ,最后,您不需要在管理器中查找容易出错的路径的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM