AssetManager를 사용하여 확장 OBB 파일에서 직접 파일을로드하고 싶습니다. 내 자신을 구현했습니다사운드 파일을로드 할 수 없습니다. LibGdx
public class CustomFileHandleResolver implements FileHandleResolver
{
@Override
public FileHandle resolve(String fileName) {
return new CustomFileHandle(fileName);
}
}
내 AssetManager에 설정했습니다. 난 내 자신의 파일 핸들 생성과 나는() 함수 읽어 오버라이드 (override)하는
@Override
public InputStream read()
{
InputStream input = null;
try {
input = GameInfo.expansionFile.getInputStream(file.getPath().replace('\\', '/'));
} catch (IOException e) {
e.printStackTrace();
}
return input;
}
그것은 .OGG 파일을 제외하고 .PNG, .PACK, .FNT, 같은 모든 파일을로드, 그래서 모든 사운드 파일이되지 않습니다 추측 짐을 실은.
com.badlogic.gdx.utils.GdxRuntimeException: java.lang.ClassCastException: com.solidgamesstudio.threedefendersn.framework.CustomFileHandle cannot be cast to com.badlogic.gdx.backends.android.AndroidFileHandle
내가 그 지퍼 압축 할 수 없습니다 읽어
com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load dependencies of asset: SFx/button_click.ogg
그리고이 오류 :이 오류를 받고 있어요. 7zip에서 "Store"로 압축을 선택하여 전혀 압축되지는 않지만 여전히이 문제가 발생합니다.
파일이로드 될 때 무슨 일이 벌어지고 AssetManager가 CustomFileHandleResolver
을 호출하여 CustomFileHandle
을 생성하는 것을 발견했습니다. .OGG가 아닌 모든 파일에 대해서는 InputStream read()
이 호출됩니다. 이 함수에서는 zip 파일을로드합니다. 하지만 .OGG를로드 할 때이 함수를 호출하지 않습니다. 따라서 zip 파일을 아직 가져 오지 못했습니다. 문제는 .OGG 파일이 을 CustomFileHandle()
에 호출하지 않는 이유는 무엇입니까?
UPDATE
좀 더를 통과하고 난 어떻게 든부터는 다음에서 사운드를 만들 수 있기 때문에 InputStream read()
를 호출하지 않습니다 것을 알아 냈다. 이것에 대한 단서는
CustomFileHandle cannot be cast to AndroidFileHandle
입니다. 소리를 생성하는 동안 fileHandle을 전달해야합니다.
public Sound newSound (FileHandle fileHandle);
이는 SoundLoader
@Override
public void loadAsync (AssetManager manager, String fileName, FileHandle file, SoundParameter parameter) {
sound = Gdx.audio.newSound(file);
}
에서 호출 그리고 soundLoader 내 CustomFileHandleResolver를 사용합니다. 사운드가 다른 유형의 파일과 다르게 처리되는지는 알 수 없습니다. 나는 소리에 대한 특별한 취급이 있는지 Gdx.files.internal
로 얻을 수
public class InternalFileHandleResolver implements FileHandleResolver {
@Override
public FileHandle resolve (String fileName) {
return Gdx.files.internal(fileName);
}
}
그러나 기본적으로 AssetManager를 사용합니다.
UPDATE
추가 분석은 나에게 전에 언급 한 바와 같이 주요 문제는이 것을 단서를 제공합니다. OGG 파일을로드하는 동안이 AndroidFileHandle 내 파일 핸들 캐스팅 왜
CustomFileHandle cannot be cast to AndroidFileHandle
나도 몰라. 다른 유형의 파일을로드하는 경우에는 캐스팅하지 않는다는 의미 일 수 있습니다. 즉, OGG는 특별하고 캐스팅이 필요합니다. 모든 단서?
왜 사용자 정의 'FileHandleResolver'를 만드나요? 당신은'assetManager.load ("SFx/button_click.ogg", Sound.class)'및'Sound sound = assetManager.get ("SFx/button_click.ogg", Sound.class)'를 수행하면됩니다. 이것은 libgdx의 모든 표준 기능입니다. – noone
"확장 OGG에서 직접"철자를 잘못 입력했는데 "OBB"여야합니다. 명확히하기 위해, 나는 모든 자산이있는 내 자신의 OBB 확장 파일을 가지고 있습니다. 모든 파일을로드해야합니다. 나는 이것을하기 위해 AssetManager를 사용하고있다. 따라서 zip 파일의 특정 에셋 파일을 가리키는 자체 FileHandler가 필요합니다. 그리고 내 자신의 FileHandler를 사용하는 자체 FileHandleResolver가 필요합니다. – draziw
흥미로운 질문입니다. 자신을 찾을 수 있도록 여기에 해결책을 게시하십시오. – noone