“Arquivo não encontrado” ao executar um novo projeto LibGDX

115

Estou tentando aprender LibGDX, instalo todos os softwares listados aqui com um novo Eclipse 4.3 em um mac OS X Maverick formatado.

Tudo corre bem, após uma reinicialização, faço o download e executo o gdx-setup.jar, preencho o formulário e importo para o Eclipse.

Nenhum erro, nenhum aviso, quando tento executar a área de trabalho. (Clique com o botão direito no projeto da área de trabalho, Executar como -> Aplicativo Java).

Eu entendi esse erro

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)

Encontrei muitos problemas semelhantes aqui, experimentei todos sem nenhum resultado bom ... Ontem à noite achei isso , muito legal, tenho o Java 1.8 mais recente, um mac e o Eclipse se encaixam perfeitamente ...

Mas sem sucesso, tento com Java 1.6 e 1.7, sempre o mesmo erro (nenhum arquivo encontrado, mantive o Java 1.7)

Começo a fazer alguns debug, aqui minha única modificação do código original gerado pela importação.

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();
    }
}

O estranho é que pathLocal é igual a "". É normal que Gdx.files.getLocalStoragePath () não retorne nada (string vazia)?

Também o

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

Funciona bem. apenas o local dá o erro, também isLocal, e isExternal retorna true.

E eu tento um monte de combinações, como /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, e badlogic.jpg.

A imagem badlogic.jpg está lá e eu a coloquei em vários lugares para ter certeza.

E agora o motivo pelo qual estou aqui para obter ajuda é que tentei tudo da mesma forma em um PC e tudo funcionou muito bem.

O que há de errado com meu novo mac e sua configuração?

lebill
fonte
Isso é estranho ... você atualizou o projeto android no Eclipse depois de adicionar os ativos? Como isso acontece muito comigo quando adiciono um novo ativo à pasta de ativos no projeto android e depois me esqueço de atualizar o projeto android no Eclipse, isso me dará um erro dizendo que a imagem não está lá ...
florianbaethge,

Respostas:

230

Do wiki libgdx

Quando você executa o Desktop Project

O aplicativo falhará na primeira vez. Abra a Configuração de Execução que acabou de criar e defina o diretório de trabalho para o diretório android / assets /!

vincular seu projeto de desktop à pasta de ativos do Android?

Vá para Executar => Executar Configurações .. => escolha DesktopLauncher , Guia Argumentos => Diretório de Trabalho => Outros e navegue para yourproject-android / assets / e clique em Aplicar => Executar

insira a descrição da imagem aqui

Phonbopit
fonte
também para ajudar outros com o mesmo problema, para fazer o mesmo diretório funcionar com a compilação do Android, precisamos clicar com o botão direito do mouse no diretório Android / assets e clicar no caminho Construído e escolher Adicionar.
lebill,
10
Isso funcionou para mim também. É uma pena que o LibGDX tenha esse problema desde o início - é um ótimo sistema, mas coisas assim vão assustar os desenvolvedores com pouca paciência.
Richard de
Impressionante! Não faria mais sentido para libgdx substituir a imagem por um campo de texto para o projeto de amostra explicando como fazer isso? Acho que uma simples pesquisa no Google leva todos aqui de qualquer maneira, mas mesmo assim, é uma coisa estranha de se encontrar
Kai Qing
1
Caso você não tenha a pasta android / assets, configurar a pasta desktop / assets da mesma forma funcionou para mim.
Fredrik Andersson
1
Observe que esta não é uma solução, mas uma solução alternativa. Funcionará na maioria das circunstâncias, mas não em todas. Por exemplo, se você planeja gerar um atlas de textura a partir do módulo Desktop, terá que recalcular os caminhos, que por padrão são relativos ao módulo Desktop.
Fran Marzoa de
75

Para aqueles de nós que usam o Android Studio ou IntelliJ IDEA, você precisa seguir estas etapas:

  1. Selecione Executar -> Editar Configurações no menu

  2. Na caixa de texto "Working Directory:", acrescente "/ android / assets" ao caminho.

Observe que, se você executar tarefas com o gradle, isso não será um problema. Os arquivos gradle.build são configurados para usar a pasta de ativos do módulo Android.

Code-Apprentice
fonte
13

Observe que as respostas anteriores não funcionarão para usuários que desmarcaram a caixa "Android" na configuração. Realmente deve haver uma pasta de ativos padrão instalada para aqueles que não se importam com a implantação para Android.

EntangledLoops
fonte
5
Correto e correto, apenas encontrei; configurar o diretório de trabalho do Desktop para a pasta de ativos no core funcionou para mim.
naftalimich
@naftalimich Sim, acho que os ativos deveriam estar no centro. Eu entendo por que eles fizeram isso, já que o plug-in gradle do Android quer que eles estejam lá e eles não querem lidar com problemas de sincronização com cópia de cada construção / tratamento. Mas isso realmente deve ser tratado.
EntangledLoops
11

Para aqueles que usam Intellij IDEA:

  1. Executar -> Editar configurações
  2. No lado esquerdo, escolha: Aplicativo -> DesktopLauncher
  3. Na guia "Configuração", clique em "Diretório de trabalho" e escolha o caminho do seu Android / ativos
Sku Sku
fonte
3
Você pode mencionar: 1) Isso requer que você primeiro crie uma configuração de desktop. 2) Isso pressupõe que você selecionou android ao gerar seu projeto original. 3) Essa resposta já foi fornecida pelo Code-Apprentice acima como instruções para o Android Studio, que é construído no IDE IntelliJ.
EntangledLoops
6

É assim que você o corrige adequadamente sem brincar com o diretório de trabalho:

O problema é que a pasta de ativos não está marcada corretamente como resourcesdiretório para a compilação do Gradle. Para corrigir isso, você deve adicionar a seguinte linha no ./core/build.gradlearquivo de compilação:

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

Meu arquivo após uma configuração limpa com a versão libGDX recente tem esta aparência:

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"
}
Desencadeado
fonte
1

Eu uso uma solução diferente.

Em vez de criar uma configuração de execução de aplicativo, crie uma configuração de compilação do Gradle. A tarefa é desktop:run. Uma vez executado, o jogo (deve) iniciar e permanecer vivo sem travar, e os recursos devem ser encontrados.

Não sei exatamente por que, mas quando uma tarefa do Gradle é executada assim, os recursos são encontrados. Quando uma configuração de execução de aplicativo é usada (sem modificações como a resposta atualmente aceita), ele trava porque não consegue encontrar os recursos.

Zoe
fonte
0

Não tenho projeto Android. Minha solução é adicionar a pasta de ativos ao Java Build Path-> Libraries as a Class Folder. Além disso, verifique a pasta de ativos em Java Build Path-> Order and Export para incluí-la em outros projetos.

Juanjo
fonte
0

Você pode verificar o caminho dos Ativos no diretório de trabalho ou recursos vinculados. Depois de concluir, verifique o arquivo que está carregando. Na última vez, limpe e atualize o projeto e aproveite.

Amit Kumar Shrivastava
fonte
0

Tive o mesmo problema no IntelliJ e não gerei o projeto libgdx para Android (a opção Android não estava marcada como marcada) e ainda estava recebendo o mesmo erro. Em vez de vincular o diretório de trabalho a "/ android / assets /", vincule-o a " / core / assets " e funcionou bem para mim.

Salek
fonte