2014-10-12 8 views
0

Eclipse를 사용하여 내 응용 프로그램을 배포하려고하면 assets/srcassets 디렉토리가 이중 글꼴로 복사 된 글꼴에 FileNotFoundException을 던집니다.안드로이드에서 SDL이 글꼴을 찾지 못함

동일한 응용 프로그램의 Visual C++ 빌드에 SDL_ttf를 성공적으로 통합하고 Android 용 Eclipse로 이전 한 후에이 문제가 발생했습니다. 이제 저는 다시 그것에 직면하고 있습니다. 나는 그것에 대해 더 잘 쓰는게 좋을 것이라고 생각했습니다. SDL_ttf 소스는 이미 freetype 폴더와 함께 제공되며 android에서 external/freetype-2.4.12으로 참조합니다. DinoMage states I need to download this separately이지만 그는 freetype-2.4.11을 최신이라고 말합니다. 그것은 사소한 컴파일러 편협함과 별개로 내 VC 빌드와 유일한 확실한 차이점입니다.

나는 지금 조금 일하고있다. 내가 서명 한 애플 리케이션 (서명되지 않은 작동하지 않음), USB 디버깅을 사용 안 함, 그리고 그것은 글꼴을로드하고 메뉴를 표시합니다. 거기에서 다시 깨져서 어떻게 디버깅해야하는지 알 수 없습니다. 나는 그것을 어떻게 든 고칠 것이라고 확신한다. 그러나 내가 여기에 게시하지 않으면 나는 obscura도 잊을 것이다.

+0

동일한 에뮬레이터 – John

답변

0

나는 이것에 대한 결론을 얻었습니다.

이며 앱을 디버그 할 수 있습니다. 계속하면 하나의 글꼴을로드하려고 여러 번 트랩합니다. 나는 그것이 결국 멈춘다라고 생각한다, 나는 확실하지 않다. 나는 던지기 단계에서 저를 땅으로부터 밟았습니다. 그러나 거기에서 한 단계 씩이 synchronized 문에서 시작, 미안 그것은 자바의하지만 내가 생각 What does 'synchronized' mean? 내 빠른 참조에서이 경쟁 조건

public final AssetFileDescriptor openFd(String fileName) 
     throws IOException { 
    synchronized (this) { 
     if (!mOpen) { 
      throw new RuntimeException("Assetmanager has been closed"); 
     } 
     ParcelFileDescriptor pfd = openAssetFd(fileName, mOffsets); 
     if (pfd != null) { 
      return new AssetFileDescriptor(pfd, mOffsets[0], mOffsets[1]); 
     } 
    } 
    throw new FileNotFoundException("Asset file: " + fileName);//DEBUGGER traps here 
} 

당신은 거기 스테핑 단 하루 종일 수 있습니다입니다! 그것의 필요한 모든 단계를 수행 나타나고 마침내 나는에 착륙 :

public static ReadableByteChannel newChannel(InputStream inputStream) { 
    return new InputStreamChannel(inputStream); 
} 

assetmanager members of <code>inputStream</code>

아니, 마지막으로, 마지막으로, 나는 연장 SDLActivity에서

public static Context getContext() { 
    return mSingleton; 
} 

있다. 내가 선택적으로 수를 따라 디버그/실행에서 일식 두 버튼을 사용하여 "분리"발견

다행히 sdlactivity singleton members

:에 대해 내가 알고 싶지 않은 회원의 무리를 가지고

. 키보드 단축키가 없기 때문에 왜 그런지는 모르겠지만 다음에 예외가 발생할 때 다시 연결됩니다. 이것은 내가 알고 있고 은 Android와 Eclipse에서을 사랑합니다. GDB보다 더 쉬울 것입니다.

는 인수를 위해서 난 대체했습니다

//TTF_Font *gFont = TTF_OpenFont("res/stubbornFont.ttf", 160); 

정말 에 대한 해결책을 찾고 있었다 편집 여기

/UPDATE

TTF_Font *font=TTF_OpenFontRW(SDL_RWFromFile("res/stubbornFont.ttf", "rb"), 1, 160);//Same difference 

turning off uncaught exceptions in eclipse, 실제로는 Window-> Preferences- > 자바 -> 디버그 그리고 그것은 나를 위해 맨 처음에있는 상자입니다.

1

안드로이드와 함께 디버거를 사용하는 것에 관해서 많이 알지는 못하지만, 달리 제안 할 수 있습니다.

자산 경로는 실제로 "자산"으로 지정되어 있습니까? 가능하다면 안드로이드와 SDL을 어떻게 "자산"대신에 보게 될지 모르겠습니다.

SDL 및 SDL_ttf와 같은 친구 용 라이브러리는 먼저 애셋 디렉토리의 로컬 파일을 검색 한 다음 루트 디렉토리를 기준으로 검색합니다. 그래서 당신의 "res/stubbornFont.ttf"는 리소스 "res"디렉토리에 있고 SDL_ttf가 보이지 않기 때문에 결코로드되지 않을 것으로 예상됩니다.

아마 "../res/stubbornFont.ttf"와 같은 자산 /과 관련하여 지정할 수 있습니다. 그러나 테스트하지는 않았습니다. 글꼴을 assets /에 넣고 "stubbornFont.ttf"로로드하면 작동합니다.

+0

먼저, dinomage 튜토리얼에 대한 훌륭한 작업에 감사드립니다. 내 오타를 지적 해 주셔서 다시 한번 감사드립니다. 나는 글꼴을 자산 (Assetts)에 직접 넣으려고했다. 이후, 다른 글꼴을 시도하고 "assets /"로 이름 문자열 접두사를 붙였습니다. 이것은 실제로 내가 고친 Eclipse nag보다 더 나빴다. – John

+0

죄송합니다. 유감스럽게도 "assets/stubbornFont.ttf"를 넣지 않아야합니다. 에셋을 로컬로 검색하면 "stubbornFont.ttf"가됩니다. 자습서를 매우 환영합니다! 나는 사람들이 그 (것)들을 새롭게하는 생각 나게하기 때문에 그 (것)들을 언급하는 것을 듣는 것을 좋아한다. ;) –