"Archivo no encontrado" al ejecutar un nuevo proyecto LibGDX

115

Estoy tratando de aprender LibGDX, instalo todo el software enumerado aquí con un nuevo Eclipse 4.3 en un Mac OS X Maverick con formato nuevo.

Todo va bien, después de un reinicio, descargo y ejecuto gdx-setup.jar, completo el formulario e importo a Eclipse.

Sin error, sin advertencia, cuando intento ejecutar el escritorio. (Haga clic derecho en el proyecto de escritorio, Ejecutar como -> Aplicación Java).

Tengo este error

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: badlogic.jpg
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:130)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:121)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
at com.diesel.bugs.DieselBugs.create(DieselBugs.java:21)
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: badlogic.jpg (Local)
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:134)
at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:218)
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:137)

Encontré muchos problemas similares aquí, los probé todos sin ningún buen resultado ... Anoche encontré esto , muy bueno, tengo la última versión de Java 1.8, una Mac y Eclipse encaja perfectamente ...

Pero sin éxito, lo intento con Java 1.6 y 1.7, Siempre el mismo error (No se encontró ningún archivo, me quedé con Java 1.7)

Empiezo a hacer alguna depuración, aquí mi única modificación del código original generado por la importación.

package com.diesel.bugs;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class DieselBugs extends ApplicationAdapter {
    SpriteBatch batch;
    Texture imgExternal,imgLocal;

    @Override
    public void create () {
        batch = new SpriteBatch();
        String pathLocal = Gdx.files.getLocalStoragePath();
        String pathExternal = Gdx.files.getExternalStoragePath();
        Boolean isExternal = Gdx.files.isExternalStorageAvailable();
        Boolean isLocal = Gdx.files.isLocalStorageAvailable();
        imgExternal = new Texture(Gdx.files.external("/Desktop/badlogic.jpg"));
        imgLocal = new Texture(Gdx.files.local("badlogic.jpg")); 
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(imgExternal, 0, 0);
        batch.end();
    }
}

Lo extraño es que pathLocal es igual a "". ¿Es normal que Gdx.files.getLocalStoragePath () no devuelva nada (cadena vacía)?

También el

imgExternal = new Texture(Gdx.files.external("/Desktop/badlogic.jpg"));

Funciona genial. solo el local da el error, también isLocal y isExternal devuelve verdadero.

Y trato de una gran cantidad de combinaciones, como /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, y badlogic.jpg.

La imagen badlogic.jpg está ahí y la puse en varios lugares para estar seguro.

Y ahora, la razón por la que estoy aquí para pedir ayuda es que simplemente intento el mismo paso en una PC y todo funciona muy bien.

¿Qué pasa con mi nueva mac y su configuración?

lebill
fuente
Eso es extraño ... ¿actualizó el proyecto de Android en Eclipse después de agregar los activos? Debido a que eso me sucede mucho cuando agrego un nuevo activo a la carpeta de activos en el proyecto de Android y luego me olvido de actualizar el proyecto de Android en Eclipse, me dará un error diciendo que la imagen no está allí ...
florianbaethge

Respuestas:

230

De libgdx wiki

Cuando ejecuta Desktop Project

La aplicación fallará la primera vez. Abra la configuración de ejecución que acaba de crear y establezca el directorio de trabajo en el directorio android / assets /.

vincular su proyecto de escritorio a la carpeta de activos de Android?

Vaya a Ejecutar => Ejecutar configuraciones .. => elija DesktopLauncher , pestaña Argumentos => Directorio de trabajo => Otros, luego busque su proyecto-android / assets / y haga clic en Aplicar => Ejecutar

ingrese la descripción de la imagen aquí

Phonbopit
fuente
También para ayudar a otros con el mismo problema, para que el mismo directorio funcione con la compilación de Android, debemos hacer clic con el botón derecho en el directorio Android / assets y hacer clic en Ruta construida y elegir Agregarla.
lebill
10
Eso también lo hizo por mí. Qué lástima que LibGDX tenga este problema desde el principio; es un gran sistema, pero cosas como esa van a asustar a los desarrolladores con poca paciencia.
Richard
¡Increíble! ¿No tendría más sentido que libgdx reemplace la imagen con un campo de texto en el proyecto de muestra explicando cómo hacer esto? Supongo que una simple búsqueda en Google lleva a todos aquí de todos modos, pero no obstante, es algo extraño de encontrar
Kai Qing
1
En caso de que no tenga la carpeta android / assets, configurar la carpeta desktop / assets de la misma manera funcionó para mí.
Fredrik Andersson
1
Tenga en cuenta que esta no es una solución, sino una solución alternativa. Funcionará en la mayoría de las circunstancias, pero no en todas. Por ejemplo, si planea generar un atlas de texturas desde el módulo Escritorio, tendrá que volver a calcular las rutas, que por defecto son relativas al módulo Escritorio.
Fran Marzoa
75

Para aquellos de nosotros que usamos Android Studio o IntelliJ IDEA, debe seguir estos pasos:

  1. Seleccione Ejecutar -> Editar configuraciones en el menú

  2. En el cuadro de texto "Directorio de trabajo:", agregue "/ android / assets" a la ruta.

Tenga en cuenta que si ejecuta tareas con gradle, esto no es un problema. Los archivos gradle.build están configurados para usar la carpeta de activos del módulo de Android.

Aprendiz de código
fuente
13

Tenga en cuenta que las respuestas anteriores no funcionarán para los usuarios que desmarcaron la casilla "Android" en la configuración. Realmente debería haber una carpeta de activos predeterminada instalada para aquellos a quienes no les importa la implementación para Android.

EnredadosLoops
fuente
5
Correcto y correcto, simplemente lo encontré; configurar el directorio de trabajo del escritorio en la carpeta de activos en el núcleo funcionó para mí.
naftalimich
@naftalimich Sí, creo que los activos deberían estar realmente en el núcleo. Entiendo por qué lo hicieron, ya que el complemento de Android Gradle los quiere allí y no querían lidiar con copiar todo cada compilación / lidiar con problemas de sincronización. Pero esto realmente debería abordarse.
EntangledLoops
11

Para aquellos que usan Intellij IDEA:

  1. Ejecutar -> Editar configuraciones
  2. En el lado izquierdo, elija: Aplicación -> DesktopLauncher
  3. En la pestaña "Configuración", debajo de "Directorio de trabajo", elija su ruta de Android / assets
Sku Sku
fuente
3
Podría mencionar: 1) Esto requiere que primero cree una configuración de escritorio. 2) Esto supone que seleccionó Android al generar su proyecto original. 3) Code-Apprentice ya proporcionó esta respuesta como instrucciones para Android Studio, que se basa en IntelliJ IDE.
EntangledLoops
6

Así es como lo arregla correctamente sin jugar con el directorio de trabajo:

El problema es que la carpeta de activos no está marcada correctamente como resourcesdirectorio para la compilación de Gradle. Para solucionar esto, debe agregar la siguiente línea en el ./core/build.gradlearchivo de compilación:

sourceSets.main.resources.srcDirs = [ "assets/" ]

Mi archivo después de una configuración limpia con la versión reciente de libGDX se ve así:

apply plugin: "java"

sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

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

eclipse.project {
    name = appName + "-core"
}
Desencadenado
fuente
1

Utilizo una solución diferente.

En lugar de crear una configuración de ejecución de la aplicación, cree una configuración de compilación de Gradle. La tarea es desktop:run. Una vez que se ejecuta, el juego (debería) iniciarse y mantenerse vivo sin fallar, y se deberían encontrar los recursos.

No estoy exactamente seguro de por qué, pero cuando se ejecuta una tarea de Gradle de esta manera, se encuentran los recursos. Cuando se utiliza la configuración de ejecución de una aplicación (sin modificaciones como la respuesta aceptada actualmente), se bloquea porque no puede encontrar los recursos.

Zoe
fuente
0

No tengo proyecto de Android. Mi solución es agregar la carpeta de activos a Java Build Path-> Libraries como una carpeta de clase. Además, verifique la carpeta de activos en Java Build Path-> Order and Export para incluir esto en otros proyectos.

Juanjo
fuente
0

Puede verificar la ruta de los activos en el directorio de trabajo o los recursos vinculados. Una vez hecho esto, verifique el archivo que está cargando. Por último, limpie y actualice el proyecto y disfrute.

Amit Kumar Shrivastava
fuente
0

Tuve el mismo problema en IntelliJ, y no había generado el proyecto libgdx para Android (la opción de Android no estaba marcada como marcada) y todavía recibía el mismo error. En lugar de vincular el directorio de trabajo a "/ android / assets /", lo vinculé a " / core / assets " y funcionó bien para mí.

Salek
fuente