Java 加载atlas文件时发生Libgdx错误

Java 加载atlas文件时发生Libgdx错误,java,android,libgdx,scene2d,Java,Android,Libgdx,Scene2d,我已经开始在Libgdx中开发游戏,并且开始做一些事情。我得到了一个background.png,我正试图从我的皮肤加载它。我正在尝试将gameskin.atlas加载到AssetManager对象中,但每次尝试加载时,都会收到一条错误消息: Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing file: packs/gameskin.atlas at com.badlogic.gdx.utils

我已经开始在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

您正试图将
地图集
加载到地图中。Atlas是一个包含图像所有压缩数据的文件。
Skin
保存要与
Scene2D
元素一起使用的数据,如
BitmapFont
LabelStyle
ButtonStyle

皮肤需要json皮肤文件和atlas。要使用
AssetManager
一次性正确加载它,您需要使用
SkinLoader.SkinParameter

manager.load("skin.json", Skin.class, new SkinLoader.SkinParameter("image.atlas"));
此外,我更喜欢使用AssetDescriptors在manager中查找资产。这些将进入您的经理课程:

//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"));
//图集或纹理不需要其他参数。
公共静态最终资产描述人图集=
新资产描述器(“image.atlas”,textureAttlas.class);
//蒙皮确实需要其他参数。
公共静态最终资产描述器外观=
新的AssetDescriptor(“skin.json”、skin.class、,
新的SkinLoader.SkinParameter(“image.atlas”);

现在在需要时/以任何方式加载这些
manager.load(skin)
。当您需要特定资产时,可以在资产类中静态查找这些描述符,并将其传递给经理
manager.find(Assets.SKIN)
。首先,当您键入
资产时,这会创建一个很好的资产列表。
,其次,分配资产时不需要强制转换或添加资产的
.class
,因为它已经在
AssetDescriptor
中,最后不需要字符串在管理器中查找容易出错的路径。

您正试图将
Atlas
加载到一个数据库中。Atlas是一个包含图像所有压缩数据的文件。
Skin
保存要与
Scene2D
元素一起使用的数据,如
BitmapFont
LabelStyle
ButtonStyle

皮肤需要json皮肤文件和atlas。要使用
AssetManager
一次性正确加载它,您需要使用
SkinLoader.SkinParameter

manager.load("skin.json", Skin.class, new SkinLoader.SkinParameter("image.atlas"));
此外,我更喜欢使用AssetDescriptors在manager中查找资产。这些将进入您的经理课程:

//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"));
//图集或纹理不需要其他参数。
公共静态最终资产描述人图集=
新资产描述器(“image.atlas”,textureAttlas.class);
//蒙皮确实需要其他参数。
公共静态最终资产描述器外观=
新的AssetDescriptor(“skin.json”、skin.class、,
新的SkinLoader.SkinParameter(“image.atlas”);

现在在需要时/以任何方式加载这些
manager.load(skin)
。当您需要特定资产时,可以在资产类中静态查找这些描述符,并将其传递给经理
manager.find(Assets.SKIN)
。首先,当您键入
资产时,这会创建一个很好的资产列表。
,其次,在分配资产时,您不需要强制转换或添加资产的
.class
,因为它已经在
资产描述器中了。
最后,您不需要字符串来查找管理器中容易出错的路径。

“无效行“现在。请查看更新的帖子。@DuduLasry没有更新的帖子,只有昨天的帖子。事实仍然是,您不能将
Atlas
存储在
皮肤
对象中,原因与您不能将
字符串
存储在
整数
@DuduLasry中的原因相同。显示您现在如何加载资产,因为存在问题……看起来您仍然在执行
皮肤=管理器.getLoader().getAsset(GAME_SKIN_PATH,SKIN.class)
但是
GAME_SKIN_PATH.equals(“packs/gameskin.atlas”)
可能仍然是
atlas
文件,而不是
SKIN
文件。它显示“无效行”现在。请查看更新的帖子。@dudularry没有更新的帖子,只有昨天的帖子。事实仍然是,您不能在
皮肤
对象中存储
Atlas
,原因与您不能在
整型
中存储
字符串
相同@dullasry显示您现在如何加载资产,因为存在问题……看起来像李你还在做
Skin Skin=manager.getLoader().getAsset(GAME\u Skin\u PATH,Skin.class);
但是
GAME\u Skin\u PATH.equals(“packs/gameskin.atlas”)
可能仍然是
atlas
文件,而不是
Skin
文件。