2014-02-21 3 views
2

LibGDX에서 OpenGL ES 컨텍스트 손실 문제가 있으므로이 문제를 해결하는 방법을 찾으려고합니다. 내 첫 번째 단계는 Screen을 확장하는 하나의 클래스에서 resume 함수가 호출 될 때 실제로 모든 텍스처를 다시 초기화하는 것이 었습니다. 이와 같이 :LibGDX on resume function

@Override 
public void resume() { 
    Tile.initTiles(); 
} 

resume 함수는 텍스처를 포함하여 모든 타일을 다시 생성하므로이 방법이 효과가 있다고 생각했습니다. 그러나 설명서에 따라 : ApplicationListener Docs

다시 시작 기능은 절대로 바탕 화면에서 호출해야합니다. 이제는 안드로이드 폰에서 이력서가 호출되지 않지만, 바탕 화면에서 이력서 메서드로 콘솔에 "true"를 인쇄하도록 지시하고 실제로 다시 시작 기능이 데스크톱에서 호출됩니다.

내 주요 질문은 다음과 같습니다

    내 바탕 화면에 있지만 내 안드로이드 휴대 전화에서 재개 기능 호출됩니다 왜
  • ?
  • 안드로이드 폰의 이력서에 텍스처를 다시로드하려면 어떻게해야합니까? 현재 내 질감은 뒤로 키를 누른 후 게임을 다시 시작하면 흰색입니다. 흥미롭게도 홈 버튼을 통해 빠져 나올 때 텍스처가 잘 다시로드됩니다.

답변

3

나는 그것을 어떻게하는지 빨리 설명하고 나를 위해 데스크탑과 안드로이드 모두에서 문제없이 작동했다.

먼저 Texture을 비롯한 모든 저작물에 AssetManager을 사용합니다. 로딩 화면을 통해 실제 게임 플레이 화면에 들어가기 전에 일반적으로 모든 자산을로드합니다. 그러나 귀하의 Screen.show() 방법으로로드 할 때도 작동해야합니다.

자산이 필요할 때마다 검색하는 유일한 방법은 AssetManager.get(...)입니다. 내 AssetManager은 실제로 기본 게임 클래스의 public static 멤버이므로 내 코드에서 아무 곳에서나 액세스 할 수 있으며 그 중 하나만 있습니다.

Screen.resume() 메서드에서 나는 이것이 실제로 필요하다고 확신하지 않지만 AssetManager.finishLoading()을 넣었습니다.

게임이 시작되고 AssetManager이 인스턴스화 된 직후 정적 메서드 Texture.setAssetManager(...)을 호출합니다.

이렇게하면 원이 닫힙니다. Android에서 OGL 컨텍스트가 손실되면 LibGDX가 실제로이를 다시 발생시킵니다. Textures에 을 설정 했으므로 관리자는 다시로드 한 후에 텍스처를 찾을 수 있습니다. AssetManager.finishLoading()은 다시로드가 완료 될 때까지 대기합니다. 그 후에 모든 것이 컨텍스트 손실 이전처럼 작동해야합니다.

Screen.resume()이 호출되지 않는 이유는 말할 수 없습니다. 나를 위해 안드로이드에서 호출됩니다. 어쩌면 LibGDX 버전을 업데이트해야 할 수도 있습니다.