2013-03-06 1 views
1

두 버전 모두 사용할 수 있지만 어떤 버전을 사용해야하며 그 버전을 사용해야하는 이유는 무엇입니까? 이미 애셋을 언로드 한 경우 TextureAtlas를 처리해야합니까?AssetManager - 사용할 버전

버전 1 : 팩 파일 (위치 데이터가있는 TexturePacker 파일)을 png와 함께로드하십시오.

gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt")); 

assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt"); 
assetManager.load(DATA_DIR_PATH + "GameSpritesPack.png"); 

// Call only if assetmanager's update method returns true 
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet); 

는 언로드하려면 :

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) { 
    assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt"); 
} 

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.png")) { 
    assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.png"); 
} 

if(gameSpriteSheet != null) { 
    gameSpriteSheet.dispose(); 
} 

버전 2 :로드 전용 팩 파일 (위치 데이터와 TexturePacker 파일).

assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt"); 

// Call only if assetmanager's update method returns true 
gameSpriteSheet = assetManager.get(DATA_DIR_PATH + "GameSpritesPack.txt", TextureAtlas.class); 
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet); 

는 언로드하려면 :

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) { 
    assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt"); 
} 

if(gameSpriteSheet != null) { 
    gameSpriteSheet.dispose(); 
} 

참고 : 내가 AssetManager하고 ​​다른 블로그에 마리오의 게시물을 읽었지만 내가 왜 두 버전 모두 잘 작동 이상 얻을 수가 없습니다.

답변

6

AssetManager는 "백그라운드에서"자산을로드하기위한 것입니다. 나열된 첫 번째 버전은 현재 스레드에서 동 기적으로 atlas를로드합니다. 실제로 AssetManager를 전혀 사용하지 않습니다. 괜찮 으면 좋겠지 만 아틀라스가 크면 (또는이 작업을 많이하고있는 경우) 잠시 동안 앱이 멈추는 경우가 있습니다.

gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt")); 

이 실행됩니다. 두 번째 예에서는 두 개의 assetManager 행을 삭제할 수 있습니다.이 경우 아무 것도 수행하지 않으므로 (유용합니다).

두 번째 버전은 AssetManager의 "올바른"사용법입니다. 기본적으로 애셋 관리자에게 첫 번째 버전 (... new TextureAtlas(...))에서 사용한 코드를 백그라운드 스레드에서 실행하도록 요청합니다. 백그라운드 스레드가 완료 될 때까지 기다려야합니다 (예 : update()이 true를 반환). 아이디어는로드가 완료되었는지를 주기적으로 확인하면서 포 그라운드의 렌더링 스레드에서 다른 것들을 수행 할 수 있습니다 (예 : 화면의 예쁜 패턴에 애니메이션을 적용하여 게임 애셋을로드하는 동안주의를 산만하게 할 수 있음).

+1

고맙습니다. 따라서, 팩 파일 (이 경우 .txt)을로드하면 자동으로 연결된 .png 파일이로드됩니다. 마지막으로 내가 놓친 스레드에 질문이 있습니다. 두 번째 버전에서 애셋을 삭제 한 경우에도 spritesheet (TextureAtlas)를 처리해야합니까? – Malakai

+2

예.'.txt' 파일이'TextureAtlas'에로드되면 참조 된 모든 텍스처 파일을로드합니다. 자산 관리자가 수동으로로드 한 자산은 수동으로 폐기하지 않아야합니다. AssetManager에서'unload'를 사용하십시오. https://code.google.com/p/libgdx/wiki/AssetManager –

+0

질문에 내 코드가 표시되면 그랬습니다. 하지만 언로드 한 후에는 TextureAtlas (gameSpritePack)를 삭제했습니다. 맞습니까? 그렇지 않아도됩니까? 고맙습니다. – Malakai

관련 문제