2013-01-27 15 views
5

現在LibGDXゲームを作成しており、スプライトシートのXMLファイルを開く必要があります。残念ながら、ファイルを開こうとすると、IOExceptionと表示されます。ファイルは適切な場所にあり、プロジェクトはきれいで最新のものなどあります。AndroidはLibGDXを使用してファイルを開くことができません

LibGDXは同じディレクトリに画像ファイルを開いて表示しますが、実際にはFileHandleのXMLファイルを取得しますオブジェクト(私はサイズをlogcatして、それが一致している)。しかし、ファイルをSAXパーサに送信すると、ファイルを開くことができないというファイルに戻ってくる例外が発生します。

ここClipSpriteクラス内のコードの問題の行です:

private void parseConfigFile(FileHandle file) throws ParserConfigurationException, SAXException 
{ 
    //Use a SAX parser to get the data out of the XML file. 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser parser = factory.newSAXParser(); 
    XMLConfigHandler handler = new XMLConfigHandler(); 

    //Parse through the document 
    try 
    { 
     parser.parse(file.path(),handler); //IOException here 
    } 

そして、ここでは、私が

//This loads a png file 
    texture = new Texture(Gdx.files.internal("data/graphics/CDE1/CDE1.png")); 
    texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);  
    TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275); 

    //Here I load the xml file and it tells me how many bytes it is 
    Gdx.app.error("File","xml bytes:"+Gdx.files.internal("data/graphics/CDE1/CDE1.xml").length()); 

    //Here I load the same file and it crashes 
    //Note that it looks in the subdirectory and finds /CDE1.xml properly 
    animation = new ClipSprite("data/graphics/CDE1"); 
メインLibGDXクラスの create方法でゲーム内のファイルを選択するコードがあります

logcatエラー:

java.io.IOException: Couldn't open data/graphics/CDE1/CDE1.xml 

なぜそれが可能ですかideファイルをネーティファイアしても、それを開くことができないというIOExceptionをまだ受けていますか?助けてくれてありがとう。必要に応じてさらに詳しい情報を提供するつもりだ。他の誰かがこのまたは類似した何かにぶつかる場合には1つだけの答えの中に上記のすべてのコメントを合体する

+2

IOExceptionメッセージのファイルパスが短すぎます。その時点で長い接頭辞を持つべきだと私は思います...内部ファイルはクラスパス検索でもちょっと怪しいです。代わりに "Gdx.files.local()"を使用していますか? –

+0

ファイルの内容を解析しようとするファイルハンドルの長さが正常に確認された場所と同じですか? –

+0

@RodHyde FileHandleは正しいバイトを取得します。 SAX ParserはFileを取りますが(FileHandleはLibGDXのものです)、私はFileHandle.file()を与えます。 – GraphicsMuncher

答えて

8

:「内部」のファイルを読み出すよう

は、あなたのファイルをロードするためにGdx.files.local()を試してみてください、代わりのGdx.files.internal() (圧縮された)APKのファイルであり、通常のファイルのように「可視」ではない可能性があります。 (これはあなたがパス名を渡しているコードはそれで何をしたいのかに多くを依存しています。)

libGDX FileHandle fileオブジェクトのために取得する可能性がある文字列を渡す代わりにfile.path()の、ファイルハンドルを渡すためにfile.file()を使用誤解した

libGDXの場合、file.read()を使用すると、InputStreamをコンシューマに直接渡すことができます(文字列またはファイルハンドルを渡して開くことを期待するのではなく)。

libGDXの「内部」ファイルは、AssetManager fileのAndroidにマップされているため、bit wonkysome casesにすることができます。具体的には、それらは、.jarまたは.apk内に圧縮されて格納され、従来のファイル読み取り機能では見えない。

+0

上記の注目すべきコメント: 'file.file()'は後で 'IOException'を返しますが、' file.read() 'は行いません。 – GraphicsMuncher

関連する問題