Активы не загружаются (libGDX) - PullRequest
0 голосов
/ 09 марта 2020

Итак, я создал небольшое настольное приложение в Eclipse (Gradle Project) на основе libGDX. Отлично работает в Eclipse. Когда я экспортирую как «исполняемый файл JAR» (с проверкой пакета необходимых библиотек в сгенерированный JAR), я получаю предупреждение: « Fat Jar Export: не удалось найти запись пути к классу для 'D: Project TI Helper / core / бен / по умолчанию / ».

Чего-то не хватает в манифесте в " Class-Path:. "?
enter image description here

Понятия не имею, что это о. Но JAR, конечно, не работает. Поэтому я пытаюсь запустить командную строку и выполнить команду « gradle desktop: dist --stacktrace ». Тогда файл JAR, похоже, создается без каких-либо ошибок или предупреждений. Поэтому я go to ... / desktop / build / libs / и пытаюсь запустить его с "java -jar desktop-1.0.jar ", упаковщик текстур начинает упаковку, но в завершите это сообщение в консоли. enter image description here

Сгенерированный файл атласа находится в указанном месте. Текстуры были упакованы. С какой стати это не загружает вещи ?? Кстати, я использую Java версию 1.8.0_241 для JDK и JRE.

РЕДАКТИРОВАТЬ
Таким образом, происходит сбой в классе Assets в "TextureAtlas atlas = assets2d.get (Cn.TEXTURES);". Если углубиться в AssetManager

    public synchronized <T> T get (String fileName) {
        Class<T> type = assetTypes.get(fileName);
        if (type == null) throw new GdxRuntimeException("Asset not loaded: " + fileName);         
       ...

Так что, похоже, предоставленная строка не указывает на мой файл атласа. Cn.TEXTURES определяется как "../desktop/assets/atlas/textures.atlas". Возникает вопрос: как вы пишете путь?

DesktopLauncher. java

public class DesktopLauncher
{   
    public static boolean rebuildAtlas = true;
    public static boolean drawDebugOutline = true;

    public static void main (String[] arg)
    {
        // Build Texture Atlases
        if (rebuildAtlas) {
            Settings settings = new Settings();
            settings.maxWidth = 2048;
            settings.maxHeight = 2048;
            settings.pot = false;
            settings.combineSubdirectories = true;

            // Pack images in "textures" folder
            TexturePacker.process("assets/textures", "assets/atlas", "textures.atlas");

        }   

        LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();

        cfg.title = "TI Helper";
        cfg.useGL30 = false;
        cfg.width = Cn.RESOLUTION_WIDTH;
        cfg.height = Cn.RESOLUTION_HEIGHT;
        cfg.fullscreen = true;

        new LwjglApplication(new TIHelper(), cfg);

    }
}            

Assets. java

public class Assets implements Disposable, AssetErrorListener
{
    public static final String TAG = Assets.class.getName();
    public static final Assets instance = new Assets();

    // Asset managers
    public AssetManager assets2d;

    public AssetDeco assetDeco;
    public AssetFonts fonts;
    public AssetMisc assetMisc;

    // General fonts
    public static Font not16, not20, not24, dig16;

    // Singelton: prevent installation from other classes
    private Assets() {}

    public void init ()
    {

        // Init 2D graphics manager
        init2DAssetManager();

        TextureAtlas atlas = assets2d.get(Cn.TEXTURES);          
        // Cn.TEXTURES == String TEXTURES = "../desktop/assets/atlas/textures.atlas";

        // Create game resource objects
        fonts = new AssetFonts();
        assetDeco = new AssetDeco(atlas);
        assetMisc = new AssetMisc(atlas);

        // Create fonts
        not16 = new Font(Assets.instance.fonts.notalot_16);
        not20 = new Font(Assets.instance.fonts.notalot_20);
        not24 = new Font(Assets.instance.fonts.notalot_24);
        dig16 = new Font(Assets.instance.fonts.digits_16);
    }

    private void init2DAssetManager()
    {
        // Create the manager
        assets2d = new AssetManager();
        // Set asset manager error handler
        assets2d.setErrorListener(this);
        // Load texture atlas
        assets2d.load(Cn.TEXTURES, TextureAtlas.class);
        // Start loading assets and wait until finished
        assets2d.finishLoading();

        // Prompt output
        Gdx.app.debug(TAG, "# of assets loaded: " + assets2d.getAssetNames().size);
        for (String a : assets2d.getAssetNames())
            Gdx.app.debug(TAG, "asset: " + a);
    }

    @Override
    public void dispose ()
    {
        assets2d.dispose();
    }

    public void error (String filename, Class<?> type, Throwable throwable) {
        Gdx.app.error(TAG, "Couldn't load asset '" + filename + "'", (Exception)throwable);
    }            
    ...                   

Desktop build.gradle

apply plugin: "java"

sourceCompatibility = 1.8
sourceSets.main.java.srcDirs = [ "src/" ]
sourceSets.main.resources.srcDirs = ["../desktop/assets"]

project.ext.mainClassName = "com.ti.desktop.DesktopLauncher"
project.ext.assetsDir = new File("../desktop/assets")

task run(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
}

task debug(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
    debug = true
}

task dist(type: Jar) {
    manifest {
        attributes 'Main-Class': project.mainClassName
    }
    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar
}

dist.dependsOn classes

eclipse.project.name = appName + "-desktop"      

Рабочая область build.gradle

buildscript {


    repositories {
        mavenLocal()
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        jcenter()
        google()
    }
    dependencies {


    }
}

allprojects {
    apply plugin: "eclipse"

    version = '1.0'
    ext {
        appName = "ti-helper"
        gdxVersion = '1.9.10'
        roboVMVersion = '2.3.8'
        box2DLightsVersion = '1.4'
        ashleyVersion = '1.7.0'
        aiVersion = '1.8.0'
    }

    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
        google()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        maven { url "https://oss.sonatype.org/content/repositories/releases/" }
    }
}

project(":desktop") {
    apply plugin: "java-library"


    dependencies {
        implementation project(":core")
        api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
        api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
        api "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
        api "com.badlogicgames.gdx:gdx-tools:$gdxVersion"
        api "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion"
        api "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop"

    }
}

project(":core") {
    apply plugin: "java-library"


    dependencies {
        api "com.badlogicgames.gdx:gdx:$gdxVersion"
        api "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
        api "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
        api "net.dermetfan.libgdx-utils:libgdx-utils:0.13.4"
        api "net.dermetfan.libgdx-utils:libgdx-utils-box2d:0.13.4"

    }
}              

Если кто-то может мне помочь, это будет очень ценно. Это мой первый проект в libGDX, и я очень застрял здесь, и у меня нет идей, как найти какие-либо подсказки, что может быть не так.

1 Ответ

0 голосов
/ 23 марта 2020

У меня просто была такая же проблема, и удаление ".atlas" из имени файла исправило это. Несмотря на то, что это тип файла, когда я открываю свойства моего файла атласа в проводнике Windows, этот тип файла просто отображается как «файл», а не как атлас.

...